【发布时间】:2011-03-26 08:44:22
【问题描述】:
总的来说,我是国际奥委会的新手,我有点难以理解我正在尝试做的事情是否有意义。我有一个 Web 表单应用程序,我想在其中创建一个模块来为我定义一些绑定。绑定将用于将存储库注入我的业务经理类,允许我对业务经理进行单元测试。此外,我想使用容器将实体框架上下文注入到我的存储库中,这样它们每个 http 请求都共享相同的上下文。所以这就是我想知道的:
我了解我需要使用相同的内核实例来管理我的对象创建及其生命周期。例如,如果我想要一个每个 httprequest 类型的场景,我需要内核实例在该时间段内可用。如果我需要一个单例怎么办?然后它必须以某种方式在应用程序范围内。那么我到底在哪里存储 IKernel 实例呢?看来我可能想在我的 Global.asax 中将其设为静态,这是正确的方法吗?线程安全是否值得关注?
由于我使用 Bind 来定义我的绑定,当我不应该从 UI 引用我的数据访问层时,如何在 Web/UI 层中进行该定义?我的参考看起来像 .Web --> .Business --> DataAccess。似乎我想告诉内核“嘿管理我的数据访问实例,但在编译时没有对它们的引用。”像这样的绑定:
//Any object requesting an instance of AdventureWorksEntities will get an instance per request
Bind<AdventureWorksEntities>().ToSelf().InRequestScope();
我觉得我可能处理不正确,谢谢。
【问题讨论】:
标签: c# dependency-injection inversion-of-control ioc-container ninject