我对IOC一般不太了解,有些困惑,希望你能帮我澄清疑问。我有一个Web Forms应用程序,想要创建一个模块来定义一些绑定关系。这些绑定关系将用于将仓储库注入到我的业务管理器类中,从而使我能够对业务管理器进行单元测试。此外,我还想使用容器将Entity Framework上下文注入到我的仓储库中,以便它们在每个HTTP请求期间共享相同的上下文。所以,我想知道:
我知道需要一个相同的内核实例来管理对象的创建和生命周期。例如,如果我想要一个每个HTTP请求类型场景,我需要在此期间保持内核实例的可用性。那如果我需要一个单例?那么它必须以某种方式作用于应用程序范围。那么我应该在哪里存储IKernel实例?看起来我可能想把它作为Global.asax文件中的静态变量存储,这样做正确吗?线程安全是否值得关注?
由于我正在使用Bind<>来定义我的绑定关系,当我不应该从UI层引用我的数据访问层时,我该如何在Web / UI层中进行定义?我的引用看起来像.Web --> .Business --> DataAccess。似乎我想告诉内核“嘿,管理我的数据访问实例,但不要在编译时引用它们。”像这样的绑定:
// 任何请求AdventureWorksEntities实例的对象都将获得一个每个请求的实例
Bind<AdventureWorksEntities>().ToSelf().InRequestScope();
感觉我可能方法不对,谢谢您。