gpt4 book ai didi

c# - Asp.NET 应用程序中的单例

转载 作者:行者123 更新时间:2023-11-30 19:39:28 27 4
gpt4 key购买 nike

在我的应用程序中,我为每个调用创建一个 dbcontext,并通过 Ninject 将其注入(inject)依赖项。

我一直在考虑创建一个单例类(ContextManager - BaseController 会在每个请求上设置上下文)以使上下文在任何地方都可用,从而允许所有服务共享相同的上下文。这将使禁用代理创建等变得容易,因为上下文仅从一个地方管理。

但是,由于该对象是一个单例对象,因此每个请求都会覆盖上下文,这对我来说不起作用(我不希望多个请求共享一个上下文)。

执行此操作的最佳方法是什么(如何优选仅在请求范围内使用单个上下文)?

最佳答案

您所描述的不是单例,而是请求作用域对象。 ASP.NET MVC 对依赖注入(inject)有很强的支持,你应该允许你的 DI 绑定(bind)来确定上下文的来源,而不是自己实例化它。 Ninject 有绑定(bind)语法来支持这一点。我认为它是:

Bind<DataContext>().ToSelf().InRequestScope();

只要您始终如一地使用良好的依赖注入(inject)模式,这应该会导致将相同的 DataContext 实例传递给您在同一请求中拥有的每个依赖项。

依赖依赖注入(inject)构建上下文的优势在于,如果您想更改细节,例如禁用对上下文的更改跟踪,您可以简单地更改您的 DI 绑定(bind)以使用自定义方法或工厂,其余的您的代码根本不需要更改。

关于c# - Asp.NET 应用程序中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27551038/

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