控制反轉_依賴注入簡明教程

在面向對象中IOC是一個重要的設計思想。這篇文章將帶領你們快速掌握控制反轉和依賴注入。c#

注:代碼基於c#

零、Ioc

Ioc 英文是 Inversion of Control,中文是控制反轉。所謂控制反轉,就是A類中有對B類方法的調用,咱們調用以前通常都會先new,這樣就增長了類和類之間的耦合度。爲了下降耦合度,將A類對B類的的控制權交給Ioc容器,讓雙方都依賴Ioc容器。函數

1、DI

DI 的英文是 Dependency Injection,中文是依賴注入。依賴注入是實現Ioc的一種方式,也是經常使用的方式。依賴注入的方式主要有三種:構造函數注入接口注入屬性注入。(由於這篇文章知識一個簡單的入門,所以咱們不講解這三種注入)咱們來經過一個例子,來看一下依賴注入的好處:ui

故事:小吳是一個公司的CEO,天天都須要司機開車送他上下班,開始他只有一個司機,每次司機生病,他就只能本身開車上下班。所以小吳設立了一個司機部門,部門中有多名司機,由司機部門給小吳指派司機。this

分析:從上面的故事能夠分析得出,剛開始小吳是依賴者,司機是被依賴者,小吳依賴於小剛。後來經過增長司機部門這個Ioc容器,
小吳和小剛之間的關係變爲了,小吳依賴於司機部門。設計

咱們經過代碼看一下(這裏使用到了 .NET 依賴注入容器 AutoFac):code

static void Main(string[] args)
{
    //接小吳
    IContainer driverCont = DriverDepartment();
    //司機部門分配一個司機給CEO小吳
    CE0_Wu wu = driverCont.Resolve<CE0_Wu>();
    wu.Car();
    Console.Read();
}
/// <summary>
/// 司機部門
/// </summary>
/// <returns></returns>
private static IContainer DriverDepartment()
{
    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<CE0_Wu>();
    builder.RegisterType<Driver>().As<IDriver>();
    return builder.Build();
}
}


/// <summary>
/// 抽象以來
/// </summary>
public class Driver : IDriver
{
/// <summary>
/// 開車
/// </summary>
public void Drive()
{
    Console.WriteLine("開車送老闆");
}
}

public interface IDriver
{
void Drive();
}
/// <summary>
/// 小吳
/// </summary>
public class CE0_Wu
{
private IDriver driver;

public CE0_Wu(IDriver driver)
{
    this.driver = driver;
}

public void Car()
{
    driver.Drive();
}
}
相關文章
相關標籤/搜索