權重:
AddSingleton→AddTransient→AddScoped
AddSingleton的生命周期:
項目啟動-項目關閉 相當於靜態類 只會有一個
AddScoped的生命周期:
請求開始-請求結束 在這次請求中獲取的對象都是同一個
AddTransient的生命周期:
請求獲取-(GC回收-主動釋放) 每一次獲取的對象都不是同一個
控制器
[HttpGet] public IActionResult SetTest() { sing.Age = 18; sing.Name = "小紅"; tran.Age = 19; tran.Name = "小明"; scon.Age = 20; scon.Name = "小藍"; aService.RedisTest(); return Json("OK"); }
注入
public static void AddTestTran(this IServiceCollection service) { service.AddTransient<ITranTest, TranTest>(); service.AddSingleton<ISingTest, SingTest>(); service.AddScoped<ISconTest, SconTest>(); service.AddScoped<IAService, AService>(); }
服務:
public class AService: IAService { private ISingTest sing; ITranTest tran; ISconTest scon; public AService(ISingTest sing, ITranTest tran, ISconTest scon) { this.sing = sing; this.tran = tran; this.scon = scon; } public void RedisTest() { } }
AddSingleton的對象沒有變
AddScoped的對象沒有變化
AddTransient的對象發生變化
------------------------------------------------------------
請求get
AddSingleton的對象沒有變
AddScoped的對象發生變化
AddTransient的對象發生變化
注意:
由於AddScoped對象是在請求的時候創建的
所以不能在AddSingleton對象中使用
甚至也不能在AddTransient對象中使用
所以權重為
AddSingleton→AddTransient→AddScoped
不然則會拋如下異常