【发布时间】:2017-12-01 14:22:19
【问题描述】:
过去,我使用 Unity Container 来解决我与 Asp.Net MVC 的依赖关系。现在我计划使用 Asp.Net Core DI 而不是 Unity,因为 Unity 目前没有与 Core 集成的可行方法,我试图找出注入同一类但使用的最佳方法不同的生命周期。
为什么?我的问题本身就来了,因为在单个实体框架上下文上运行的多个线程不是线程安全的,为了在另一个线程中执行单独的查询,我需要为每个线程实例创建一个单独的 DbContext 实例。 我使用 Unity 的策略是创建 2 个 UnityContainer,一个包含所有单例类,另一个创建每个请求的实例。因此,当我在单独的线程中创建第二个查询时,我只需通过每个请求创建的统一实例来解决它。
使用 Asp.Net Core 我想知道:
1- 解决我的问题的最佳方法是什么?
2- 如果我选择相同的策略,我想知道我怎样才能拥有相同的 Asp.Net Core DI 两次?也许将 CompositionRoot 模式应用于两个“容器”
3-如果我不选择我的策略,我可以使用哪种模式在同一个容器中解析具有不同生命周期的同一类的实例,以及分别解决它们的方法是什么?
【问题讨论】:
-
我需要调查一下,但命名实例会起作用吗?这取决于您使用的 DI,因为我怀疑是否支持开箱即用。在简单的注射器中有这个:simpleinjector.readthedocs.io/en/latest/…
-
@AshleyMedway 是的,该功能取决于您使用的 DI,但正如链接所述,我想避免 GetByKey 不在我的架构中引入 ServiceLocator
-
“Unity 目前没有与 Core 集成的可行方式”。 This example project 展示了如何将 Unity 与 ASP.NET Core 集成。这里的谬误是你认为你需要一个适配器,但你不需要。
标签: c# asp.net-mvc dependency-injection asp.net-core-mvc asp.net-core-2.0