前置概念
- 依赖注入:实现控制反转的一种方式。
- 精细化控制:将所有细节交给自己来实现。
- 控制反转:直接拿过来用。
- 控制反转实现的两种方式:服务定位器,依赖注入。
- 依赖注入:声明属性之后框架自己赋值。
DI相关名词:
-
服务:所需要的对象。
-
注册服务:提前将所需要的服务进行注册。
-
注册容器:管理注册的服务。
安装依赖注入的包:Microsoft.Extensions.DependencyInjection
用例
static void Main(string[] args)
{
//创建服务集合
ServiceCollection services = new ServiceCollection();
//注册实现类
services.AddTransient<SleepHeadA>();
//调用实现类
using (ServiceProvider servicesProvider = services.BuildServiceProvider())
{
//实现控制反转
SleepHeadA sleepHeadA = servicesProvider.GetService<SleepHeadA>();
//调用从注册容器中获得的对象
sleepHeadA.Begin();
}
}
}
public interface SleepHead
{
public string name { get; set; }
public void Begin();
}
public class SleepHeadA : SleepHead
{
public string name { get;set; }
public void Begin()
{
Console.WriteLine("A开始睡觉");
}
}
服务的生命周期
- 每次调用.GetService,返回的对象都是新的。
- Transient:每次从注册容器创建的对象都是新的。
- Singleton:两次获取的是同一个对象。
- scope:可定义限制的范围。
- 同一个范围内取到的对象为同一个对象,不同范围内取到的对象则为不同对象。
- 如果一个类实现了IDisposable接口,则离开作用范围之后会自动调用对象的Dispose方法。
- 对象的调用一般在范围之内。
- 在.net core中,若在长生命周期中引用比它生命周期短的对象,则会默认抛出异常。
总结
依赖注入的基本概念、实现方式以及在.NET Core中的应用,包括服务的生命周期管理。