| 1.開篇閑話 由于之前做的很多項目都沒接觸到這個,后來到了另一個公司,他們的代碼結(jié)構(gòu)是基于領(lǐng)域驅(qū)動設(shè)計的,其中里面的對象都是通過依賴注入方式(Sprint.NET)實現(xiàn)的,也大致了解了哈,在網(wǎng)上搜了些資料來理解,網(wǎng)上有很多實現(xiàn)依賴注入的框架有很多,比如astle Windsor、Unity、Spring.NET、StructureMap,后續(xù)會對Unity和Spring.NET做介紹,以及自己用反射來實現(xiàn)各種方式的依賴注入。 2.原來你們是一家人 控制反轉(zhuǎn)(Inversion of Control,英文縮寫為IoC)是一個重要的面向?qū)ο缶幊?/a>的法則來削減計算機程序的耦合問題,它還有種叫法是依賴注入DI(Dependency Injection)。IoC是一種設(shè)計模式,是一種思想,相當(dāng)于一個容器,而DI就好比是實現(xiàn)IOC的一種方式。所謂依賴注入,就是由IoC容器在運行期間,動態(tài)地將某種依賴關(guān)系注入到對象之中。這些是我的個人理解哈,如有不對的地方,還請大神些指導(dǎo)哈! 3.DI的實現(xiàn)方式(后續(xù)都會對各個注入方式做代碼展示的) 構(gòu)造器注入(Constructor Injection):Ioc容器會智能地選擇選擇和調(diào)用合的構(gòu)造函數(shù)以創(chuàng)建依賴的對象。如果被選擇的構(gòu)造函數(shù)具有相應(yīng)的參數(shù),Ioc容器在調(diào)用構(gòu)造函數(shù)之前解析注冊的依賴關(guān)系并自行獲得相應(yīng)參數(shù)對象; 屬性注入(Property Injection):如果需要使用到被依賴對象的某個屬性,在被依賴對象被創(chuàng)建之后,Ioc容器會自動初始化該屬性; 方法注入(Method Injection):如果被依賴對象需要調(diào)用某個方法進(jìn)行相應(yīng)的初始化,在該對象創(chuàng)建之后,Ioc容器會自動調(diào)用該方法。 4.實例展示 就拿成都車展來說嘛,高科技的東西多,尤其是虛擬現(xiàn)實的體檢,很帶勁得。車展中有很多車展商,每個車展商有不同的車型,車展中的游客有要買車的和不買車的。根據(jù)這種情況做一下代碼的實現(xiàn):  1  //人接口
 2     public interface IPeople
 3     {
 4         void ViewCare();
 5     }
 6     //要買車的人
 7     public class PeopleWithBuyCar : IPeople
 8     {
 9         //可以通過注入實現(xiàn)指定的汽車服務(wù)商
10         private ICarVender carVender = null;
11         public PeopleWithBuyCar(ICarVender carVender)
12         {
13             this.carVender = carVender;
14         }
15         public void ViewCare()
16         {
17             ICar car = carVender.SaleCar();
18             Console.WriteLine('汽車代號:'   car.carName   ',售價'   car.carPrice);
19         }
20     }
21     //汽車廠商接口
22     public interface ICarVender
23     {
24         ICar SaleCar();
25     }
26     //大眾廠商
27     public class DaZhong : ICarVender
28     {
29         //可以通過注入實現(xiàn)指定的汽車服務(wù)商
30         private ICar car = null;
31         public DaZhong(ICar car)
32         {
33             this.car = car;
34         }
35         public ICar SaleCar()
36         {
37             return car;
38         }
39     }
40     //汽車接口
41     public interface ICar
42     {
43         string carName { get; }
44         double carPrice { get; }
45     }
46     //具體汽車信息
47     public class DaZhongCar : ICar
48     {
49         public string carName
50         {
51             get
52             {
53                 return '大眾';
54             }
55         }
56 
57         public double carPrice
58         {
59             get
60             {
61                 return 180000;
62             }
63         }
64     } 從上面的代碼可以看出,PeopleWithBuyCar依賴接口ICarVender、ICar,DaZhong依賴ICarVender和ICar,Car依賴ICar,這樣就符合依賴倒置原則了,都是依賴于對象的抽象,從而降低耦合度,方便后期的擴展。這里還沒說對象的注入,可以簡單的說一下,比如PeopleWithBuyCar類 需要依賴ICarVender接口,但是具體是ICarVender接口的哪一個實現(xiàn)類,就是通過注入來完成的,可以把DaZhong類對象注入給ICarVender,這樣就比較靈活,控制起來相對方便點。 5.小結(jié) 上面只是簡單的介紹了哈,也沒給過多的代碼的,后面再具體介紹每一種注入方式的時候,再詳細(xì)的說!謝謝大家咯! | 
|  |