依赖注入(Dependency Injection:DI):
程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。
通俗来讲,就是把有依赖关系的类放到容器中,然后在我们需要这些类时,容器自动解析出这些类的实例。
依赖注入最大的好处时实现类的解耦,利于程序拓展、单元测试、自动化模拟测试等。
控制反转(Inversion of Control:IOC):
控制反转只是一个概念,也就是将创建对象实例的控制权(原本是程序员)从代码控制权剥离到 IOC 容器
中控制。
IOC/DI的优缺点:
优点
缺点
IOC/DI
基本采用反射的方式来实现依赖注入,在一定程度会影响性能 依赖注入的三种形式:
一 、构造方法注入
目前构造方法注入是依赖注入推荐使用方式。
优点
缺点
代码示例:
public class FurionService { private readonly IRepository _repository; public FurionService(IRepository repository) { _repository = repository; } }
二 、属性方式注入
通过属性方式注入容易和类的实例属性混淆,不建议使用。
优点
缺点
代码示例:
public class FurionService { public IRepository Repository { get; set; } }
三 、方法参数注入
方法参数注入的意思是在创建对象后,通过自动调用某个方法来注入依赖。
优点:
缺点:
代码示例:
public class FurionService { public Person GetById([FromServices]IRepository repository, int id) { return repository.Find(id); } }