小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Ioc和DI之間的關(guān)系(依賴注入的核心概念)

 Levy_X 2018-12-17

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):

復(fù)制代碼
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 }
復(fù)制代碼

      從上面的代碼可以看出,PeopleWithBuyCar依賴接口ICarVender、ICar,DaZhong依賴ICarVender和ICar,Car依賴ICar,這樣就符合依賴倒置原則了,都是依賴于對象的抽象,從而降低耦合度,方便后期的擴展。這里還沒說對象的注入,可以簡單的說一下,比如PeopleWithBuyCar類  需要依賴ICarVender接口,但是具體是ICarVender接口的哪一個實現(xiàn)類,就是通過注入來完成的,可以把DaZhong類對象注入給ICarVender,這樣就比較靈活,控制起來相對方便點。

5.小結(jié)

   上面只是簡單的介紹了哈,也沒給過多的代碼的,后面再具體介紹每一種注入方式的時候,再詳細(xì)的說!謝謝大家咯!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多