繁体   English   中英

如何在Asp.Net Core DI上注入具有不同生命周期的同一个类?

[英]How can I inject same class with different Life Cycles on Asp.Net Core DI?

过去,我使用Unity容器通过Asp.Net MVC解决我的依赖关系。 现在,我计划使用Asp.Net Core DI而不是Unity,而Unity目前没有与Core集成的可行方法,并且我试图找出哪种方法是注入相同类的最佳方法,但是不同的生命周期。

为什么? 我的问题本身来了,因为在单个Entity Framework上下文上运行的多个线程不是线程安全的,并且为了在另一个线程中执行单独的查询,我需要每个线程实例的DbContext单独实例。 我在Unity上的策略是创建2个UnityContainer,一个具有所有Singleton类,另一个正在根据请求创建实例。 因此,当我在单独的线程中创建第二个查询时,我只是通过每个请求创建的unity实例来解决它。

有了Asp.Net Core,我想知道:

1-解决我的问题的最佳方法是什么?

2-如果我选择相同的策略,我想知道我如何两次拥有相同的Asp.Net Core DI?也许对两个“容器”都应用了CompositionRoot模式

3-如果我不选择策略,可以使用哪种模式在同一个容器中解析具有不同生命周期的同一个类的实例,以及分别解决它们的方法是什么?

确实,您要的是不必要的。

当您在ASP .NET Core应用程序的StartUp类的ConfigureServices (使用services.AddDbContext<MyDbContext>扩展方法)方法中添加DbContext时,默认情况下将其注册为具有作用域的生命周期。 要避开您提到的线程安全性问题,就需要作用域生存期。

当然,您可以通过传递一些附加参数来使用AddDbContext覆盖它。 或者,您可以自己注册上下文。 但是,为什么要(?)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM