1 依赖倒置
依赖倒置的核心价值:
如果没有依赖倒置,全部都是依赖细节,如果分层架构是 A层---B层--C层---D层---E层---F层,下层的修改,可能会导致上层随之改变,F层如果改变,E层要改,D层要改,C层要改......影响很大,成水波式向上影响,架构就的极度不稳定。
如果都是依赖于抽象的,抽象即接口或抽象类。 抽象是相对稳定的,修改下层不会影响上层。因为上层不是依赖于具体的,这让我们的代码更加稳定。
IOC 控制对象的创建,不就是完全控制了对象的创建吗?所以,IOC的本质是工厂。
既然IOC是工厂,那么工厂生产产品就是创建对象。
2 简单工厂创建对象会不会有什么问题呢?
工厂创建对象,如果对象没有无参数构造函数,必须得按照构造函数参数的要求,准备好构造函数。那就会出现问题:如果对象存在层层依赖,有多少层依赖,就得准备多少个方法。
要解决这个问题,我们就有了这样的一个目标:如果有依赖的,能够做到,在创建对象的时候,能够自动把对象依赖的对象给创建出来,然后传递进去,这样就很好。
Asp.Net Core的内置IOC容器可以帮助我们解决掉这个问题。
3 内置IOC容器
需要引入Microsoft.Extensions.DependencyInjection
包。
Zlt.IOC.Interfaces 命名空间下创建接口:
public interface IHeadphone
{
}
public interface IMicrophone
{
}
public interface IPower
{
}
public interface IPhone
{
void Call();
void Init123456678890(IPower iPower);
IMicrophone Microphone { get; set; }
IHeadphone Headphone { get; set; }
IPower Power { get; set; }
}
Zhaoxi.IOC.Services 实现接口:
public class Headphone : IHeadphone
{
public Headphone()
{
Console.WriteLine($"{this.GetType().Name}被构造。。");
}
}
publ