例如,多個請求即將到來,每個請求都從 DI 請求這個單例服務。使用添加的服務
public static IServiceCollection AddSingleton<TService>(
this IServiceCollection services,
Func<IServiceProvider, TService> implementationFactory)
where TService : class
多載,工廠方法能保證只運行一次嗎?
uj5u.com熱心網友回復:
該檔案不是很具體,但您可以確保,在內置容器 (MS.DI) 的背景關系中,保證每個 IServiceProvider 實體最多呼叫一次工廠。
盡管我沒有強有力的證據來證明這一說法,但完整的應用程式和框架是圍繞著保證這一點的假設而構建的。
請注意以下事項:
- 盡管任何 3rd-party 配接器實作可能沒有那么強的保證,但人們應該期待與 MS.DI 相同的行為。
- Singleton 的定義是它“作用域”到單個容器實體的生命周期,即
IServiceProvider. MS.DI 遵循這個定義,這意味著IServiceProvider在相同的基礎上創建一個新的IServiceCollection(例如通過呼叫BuildServiceProvider())將允許工廠委托被那個新的再次呼叫IServiceProvider。
在ASP.NET核心應用(除非您覆寫此),該框架管理的創建ServiceCollection及其導致的ServiceProvider。這意味著ServiceProvider在應用程式的持續時間內只有一個,這意味著您的單例工廠委托只被呼叫一次。
CreateServiceProvider()但是,當您開始手動呼叫時,您將創建額外的IServiceProvider實體,并使用它自己的單例實體,這意味著對單例工廠委托的額外呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/317620.html
