ASP.NET Core 依赖注入
依赖注入 (Dependency injection,DI) 是一种实现对象及其合作者或依赖项之间松散耦合的技术。将用来执行操作 (Action) 的对象以某种方式提供给该类,而不是直接实例化合作者或使用静态引用。通常,Class 会通过它们的构造函数声明其依赖关系,允许它们遵循 显示依赖原则 (Explicit Dependencies Principle) ,这种方法被称为 “构造函数注入(constructor injection)”。
Class 的设计中使用 DI 思想会使它们的依赖关系变得更加耦合,因为它们没有对它们的合作者直接硬编码的依赖,他们遵循 依赖倒置原则(Dependency Inversion Principle)中 “高层模块不应该依赖于低层模块,两者都应该依赖于抽象。”的设计思路, 要求 Class 在它们构造时向其提供抽象(通常是 interfaces ),而不是直接引用特定的实现。提取接口的依赖关系和提供这些接口的实现作为参数也是 策略设计模式(Strategy design pattern) 的一个示例。
依赖注入原理
// 约定一个抽象接口
public interface IRepository
{
string GetInfo();
}
// 使用EF实现接口
public class EFRepository : IRepository
{
public string GetInfo()
{
return "load data form ef!";
}
}
// 使用Dapper实现接口
public class DapperRepository : IRepository
{
public string GetInfo()
{
return "load data form dapper!";
}
}
// 在用来执行操作的 Service 的构造函数中提供抽象接口
public class OperationService
{
private readonly IRepository _repository;
public OperationService(IRepository repository)
{
_repository = repository;
}
public string GetList()
{
return _repository.GetInfo();
}
}
通过以上代码可以看出,Service 与 Repository 之间没有强依赖关系,而是都与抽象接口 IRepository 建立关系。