依赖注入是一种实现对象及其合作者或依赖项之间松散耦合的技术。
将类用来执行其操作的这些对象以某种方式提供给该类
例如,有以下两种方法
public class DDservice
{
public string getName()
{
return "用钉钉";
}
}
public class TencentService
{
public string getName()
{
return "用腾讯会议";
}
}
这样在使用这些方法时,必须先new该对象
DDservice dd = new DDservice();
dd.getName();
这样导致代码和该类,耦合度很高。在后面调用方法多的时候,我们需要使用腾讯会议对应方法时,就会需要更改很多地方,极其麻烦。
这个时候,就可以用到依赖注入。
一、 创建接口,需要用的类实现该接口
public class DDservice : IService
{
public string getName()
{
return "用钉钉";
}
}
public class TencentService : IService
{
public string getName()
{
return "用腾讯会议";
}
}
public interface IService
{
string getName();
}
二、将控制器创建有参构造函数,参数为接口,例如
这个构造参数作用:asp.net core应用保证 如果改参数类型注册在IOC容器中,对应的类就会返回
public class DIController : Controller
{
private IService _service;
//这个构造参数作用:asp.net core应用保证 如果改参数类型注册在IOC容器中,对应的类就会返回
public DIController(IService service)
{
this._service = service;
}
public IActionResult Index()
{
return Content(_service.getName());
}
}
三、需要在Stratup中激活引用
依赖注入的容器为Stratup中的ConfigureServices方法,在ConfigureServices加入
每当有其他类型请求一个IService实现这个接口的对象时,就返回DDservice的对象
//每当有其他类型请求一个IService实现这个接口的对象时,就返回DDservice的对象
Services.AddTransient<Iservice,DDservice>();//该方法为每个调用创建一个实例
//Services.AddScoped< Iservice,DDservice >();//该方法为一个请求一个实例
//Services.AddSingleton< Iservice,DDservice >();//单例模式
关于以上三种依赖注入生命周期
Transient:在每次请求时,生成一个新的实例
Scoped:在每次web请求时生成新的实例,web请求结束,生命周期截止
Singleton:单例模式,只会生成一个实例,知道应用程序停止