閱讀this後,我可以理解AddTransient
,AddScopped
和AddSingleton
之間的差異,但是我無法看到它們中的每一個的實際用法。什麼是使用IServiceCollection.AddTransient,IServiceCollection.AddSingleton和IServiceCollectionAddScopped方法的實際場景?
我的理解是
AddTransient
創建一個新的實例每次當客戶需要它。
services.AddTransient<IDataAccess, DataAccess>();
每次客戶端代碼要求時都會返回一個新的DataAccess對象。更可能是一個構造函數。 AddTransient
的
使用的情況下,當我們需要訪問數據庫讀取和更新它,摧毀訪問對象(數據訪問),其最好用AddTransient
- 不知道有關線程安。
AddScopped
創建爲每個HTTP Web請求一個新的實例。 AddScopped的
使用
services.AddScoped<ShoppingCart>(serviceProvider => ShoppingCart.GetShoppingCart(serviceProvider));
這意味着每個Web請求將具有實習生意味着每個用戶/客戶端將是具有針對HTTP web請求自己的SHOPING車實例在其自己的購物車實例。
AddSingleton
所有的HTTP Web請求創建一個實例。 AddSingleton
的
使用發現在一個示例應用程序的代碼,但我不知道它是如何是有用的。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
可有人請給一個體面的實際例子時使用AddSingleton和檢查,如果我的AddTransient和AddScopped的理解是正確的?
謝謝你Juunas,一個很好的解釋,但是,我期待一個具體的例子的答案 - 可能爲時尚早,要求。 –