AddTransient、AddSingleton、AddScoped的區別


權重:

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

 

不然則會拋如下異常

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM