在面向對象中IOC是一個重要的設計思想。這篇文章將帶領你們快速掌握控制反轉和依賴注入。c#
注:代碼基於c#
Ioc 英文是 Inversion of Control,中文是控制反轉。所謂控制反轉,就是A類中有對B類方法的調用,咱們調用以前通常都會先new,這樣就增長了類和類之間的耦合度。爲了下降耦合度,將A類對B類的的控制權交給Ioc容器,讓雙方都依賴Ioc容器。函數
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(); } }