我已经阅读了几篇关于在Entity Framework中创建通用存储库的文章。在每篇文章中,ObjectContext都作为参数传递给构造函数,如下所示:
public Repository(ObjectContext context)
{
_context = context;
}
在Web应用程序中,处理ObjectContext生活方式的首选方法是每个Web请求。这意味着,如果在Web环境中使用,这些存储库还必须具有每个Web请求的生活方式。这会扩展到使用存储库的服务,如果我们坚持使用构造函数注入,则会进一步扩展...
我认为应该在存储库之外处理ObjectContext生命周期,例如在HttpModule中。 我还希望将存储库作为单例处理,然后不能在构造函数中注入ObjectContext。必须使用另一种将ObjectContext引入存储库的机制,如ObjectContextFactory。
以单身生活方式处理存储库的缺点是什么?
答案 0 :(得分:0)
与任何其他对象一样,存储库是单例的一个问题是确定存储库具有哪些依赖关系变得更加困难。当您需要在构造函数中传递上下文时,该上下文是对ObjectContext类的依赖性的明确声明。如果您要使用静态工厂来获取对象上下文的引用,那么有必要查看存储库的实现以了解它如何使用工厂。
实现所需内容的常用方法,即在存储库外部管理ObjectContext类的范围的能力是使用依赖注入库,例如Autofac。您可以注册ObjectContext类,以便为每个HTTP请求创建一个新实例。然后,如果还注册了存储库类,则在请求存储库时,依赖项注入容器将尝试获取对ObjectContext依赖项的引用。由于每个HTTP请求只会创建一个ObjectContext实例,因此该范围内的多个存储库将接收相同的实例。 Autofac页面提供了与ASP.NET集成的示例,您可以查看它。