Asp.NET应用程序中的Singleton

Jen*_*112 2 c# asp.net entity-framework entity-framework-6

在我的应用程序中,我为每个调用创建一个dbcontext,依赖项通过Ninject注入它.

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

但是,当对象是单个对象时,每个请求都会覆盖上下文,这对我来说不起作用(我不希望多个请求共享一个上下文).

最好的方法是什么(如何在请求范围内优选单个上下文)?

Str*_*ior 5

你所描述的不是Singleton,而是Request-Scoped对象.ASP.NET MVC强烈支持依赖注入,你应该允许你的DI绑定来确定上下文的来源,而不是自己实例化它.Ninject有绑定语法来支持这一点.我认为它是:

Bind<DataContext>().ToSelf().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

只要您一致地使用良好的依赖注入模式,这应该导致相同的DataContext实例传递给您在同一请求中的每个依赖项.

依赖依赖注入构建上下文的优点是,如果要更改上下文中禁用更改跟踪等详细信息,只需更改DI绑定即可使用自定义方法或工厂,其余代码也不会根本不需要改变.