为什么需要使用依赖注入
- 将对象的创建交给框架来管理,保证安全行和可扩展性。
- .net core框架中。依赖注入也提供了创建对象和管理对象生命周期的能力。
提供依赖注入能力的包及核心类
包:
Microsoft.Extensions.DependencyInjection.Abstractions 为抽象包
Microsoft.Extensions.DependencyInjection 为具体实现包
核心类:
IServiceCollection 负责注册,作为Startup类中ConfigureServices方法的参数,使用其对对象进行注册
ServiceDescriptor 负责注入服务元素的描述
IServiceProvider 负责提供实例
IServiceScope 负责实例的生命周期
对象的生命周期
有三种方式创建对象实例:
- singleton(单例):每次请求都获取同一个实例。
- scoped(作用域):每次请求都获取不同的实例。同一个请求如果有多次获取实例,那这一个请求获取的都是同一个实例,即一个请求内获取的都是同一个实例。
- transient(瞬时):每次请求都获取不同的实例。即使是同一个请求内都可能会获取到不同的实例。
服务注册
- 单例注册
builder.Services.AddSingleton<Icount, ICountImpl>();
- 作用域注册
builder.Services.AddScoped<Icount, ICountImpl>();
- 瞬时注册
builder.Services.AddTransient<Icount, ICountImpl>();