一.注冊的幾種類型:
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();//單利模式,整個應用程序生命周期以內只創建一個實例 services.Add(new ServiceDescriptor(typeof(IAtomService<>), typeof(AtomService<>), ServiceLifetime.Scoped));//泛型注入 services.AddScoped<ISecurityService, SecurityService>();//在同一個Scope內只初始化一個實例 ,可以理解為( 每一個request級別只創建一個實例,同一個http request會在一個 scope內) services.Transient<ISecurityService, SecurityService>();//每一次GetService都會創建一個新的實例
二.注入的幾種方式:
1.構造函數注入
2.view注入
3.通過 HttpContext來獲取實例
.NET CORE 存在三種依賴注入的方式
AddTransient
:瞬時模式:每次請求,都獲取一個新的實例。即使同一個請求獲取多次也會是不同的實例
例如:Controller添加一個IUser 的依賴,在Action中,IUser的實例是不同的。
使用方式:services.AddTransient<IOperationTransient, Operation>();
AddScoped
:每次請求,都獲取一個新的實例。同一個請求獲取多次會得到相同的實例
例如:上例中,同一個Action中,實例是相同的。
使用方式:services.AddScoped<IMyDependency, MyDependency>();
AddSingleton
:單例模式:每次都獲取同一個實例
使用方式:services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
//注冊ISchedulerFactory的實例
也可以直接注入一個類,例如helper類:services.AddTransient<ExportHelper>();