gpt4 book ai didi

entity-framework - Entity Framework 通用存储库生命周期

转载 作者:行者123 更新时间:2023-12-04 08:31:24 25 4
gpt4 key购买 nike

我读过几篇关于在 Entity Framework 中创建通用存储库的文章。在每篇文章中,ObjectContext 都作为参数传递给构造函数,如下所示:

public Repository(ObjectContext context)
{
_context = context;
}

在 Web 应用程序中,处理 ObjectContext 生活方式的首选方式是针对每个 Web 请求。这意味着如果在 Web 上下文中使用,这些存储库还必须具有每个 Web 请求的生活方式。如果我们坚持构造函数注入(inject),这会传播到使用存储库的服务,并进一步传播......

我认为 ObjectContext 生命周期应该在存储库之外处理,例如在 HttpModule 中。 我还想将存储库作为单例处理,这样就无法将 ObjectContext 注入(inject)到构造函数中。必须使用另一种将 ObjectContext 放入存储库的机制,例如 ObjectContextFactory。

使用单例生活方式处理存储库的缺点是什么?

最佳答案

与任何其他对象一样,存储库是单例的一个问题是确定存储库具有哪些依赖性变得更加困难。当您需要在构造函数中传递上下文时,它是对 ObjectContext 类的依赖项的明确声明。如果您要使用静态工厂来获取对对象上下文的引用,那么有必要查看存储库的实现以了解它如何使用工厂。

实现您正在寻找的东西的一种常见方法,即在存储库外部管理 ObjectContext 类的范围的能力是使用依赖注入(inject)库,例如 Autofac .您可以注册 ObjectContext 类,以便为每个 HTTP 请求创建一个新实例。然后,如果您还注册了存储库类,则在请求存储库时,依赖项注入(inject)容器将尝试获取对 ObjectContext 依赖项的引用。由于每个 HTTP 请求只会创建一个 ObjectContext 实例,因此该范围内的多个存储库将接收相同的实例。 Autofac 页面有与 ASP.NET 集成的示例,您可以查看。

关于entity-framework - Entity Framework 通用存储库生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5492908/

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