一.注册的几种类型:
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>();