我在 MVC4 应用程序和 Ninject.MVC3 中使用 EF 4.3。控制器使用 -Repository 开关进行 MVC 脚手架。MVCScaffolder 使用 EF 创建存储库类(和相应的 IRepository 接口)以进行数据访问,其中 DbContext 派生对象始终作为每个脚手架存储库中的数据成员“更新”。
MyContext context = new MyContext();
搭建控制器的本质是,对于每个控制器,您通常还会获得相应的存储库。
问题:
1)为您拥有控制器的每个域对象都有一个存储库是否有意义?
与只应公开聚合根的存储库模式相比,这似乎违反直觉。
2) 每次实例化存储库对象时生成 DbContext 派生对象的新实例是否有意义,或者在应用程序启动时向 DI 容器注册 DbContext 派生对象的单例实例并解决它是否有意义像这样的单例存储库:
Bind<MyContext>().To<MyContext>().InSingletonScope(); //ninject code on app startup
//resolve context in repositories:
MyContext context = ServiceLocator.Current.GetInstance<MyContext>();
在应用程序的生命周期内将 DbContext 派生对象作为单例保留有什么缺点吗?
谢谢。