gpt4 book ai didi

c# - 在 Web 应用程序中的何处存储 Ninject IKernel?

转载 作者:太空狗 更新时间:2023-10-29 21:55:51 25 4
gpt4 key购买 nike

总的来说,我是 IOC 的新手,我有点难以理解我正在尝试做的事情是否有意义。我有一个 Web 表单应用程序,我想在其中创建一个模块来为我定义一些绑定(bind)。这些绑定(bind)将用于将存储库注入(inject)我的业务经理类,允许我对业务经理进行单元测试。我还想使用容器将 Entity Framework 上下文注入(inject)我的存储库,这样它们在每个 http 请求中都共享相同的上下文。所以这就是我想知道的:

  1. 我知道我需要让同一个内核实例管理我的对象创建及其生命周期。例如,如果我想要一个每个 httprequest 类型的场景,我需要内核实例在该时间段内可用。如果我需要一个单例怎么办?然后它必须以某种方式在应用程序范围内。那么我到底应该在哪里存储 IKernel 实例呢?看来我可能想在我的 Global.asax 中将其设为静态,这是正确的方法吗?线程安全是否值得关注?

  2. 由于我使用 Bind<> 来定义我的绑定(bind),当我不应该从 UI 引用我的数据访问层时,我该如何着手在 Web/UI 层中进行该定义?我的引用看起来像 .Web --> .Business --> DataAccess。似乎我想告诉内核“嘿管理我的数据访问实例,但在编译时不要引用它们。”像这样的绑定(bind):


//Any object requesting an instance of AdventureWorksEntities will get an instance per request
Bind<AdventureWorksEntities>().ToSelf().InRequestScope();

我觉得我可能处理这个问题不正确,谢谢。

最佳答案

关于第 1 部分 - 查看 Ninject.Web 扩展 - 它在应用程序级别保留内核。然后,您也可以在其中管理其他生命周期较短的资源。

此外,请在此处查看有关 EF 和 L2S DataContext 管理的问题和示例,一般来说是 Ninject 和 DI([最近几周])

更新:This answer to another question from the same OP is far more concrete (有一个 KernelContainer 类,带有一个 .Inject(object) 和一个 .Kernel)

关于c# - 在 Web 应用程序中的何处存储 Ninject IKernel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com