簡體   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