一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

 Levy_X 2018-12-17

1.開篇閑話

     由于之前做的很多項(xiàng)目都沒接觸到這個(gè),后來到了另一個(gè)公司,他們的代碼結(jié)構(gòu)是基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的,其中里面的對(duì)象都是通過依賴注入方式(Sprint.NET)實(shí)現(xiàn)的,也大致了解了哈,在網(wǎng)上搜了些資料來理解,網(wǎng)上有很多實(shí)現(xiàn)依賴注入的框架有很多,比如astle Windsor、Unity、Spring.NET、StructureMap,后續(xù)會(huì)對(duì)Unity和Spring.NET做介紹,以及自己用反射來實(shí)現(xiàn)各種方式的依賴注入。

2.原來你們是一家人

     控制反轉(zhuǎn)(Inversion of Control,英文縮寫為IoC)是一個(gè)重要的面向?qū)ο缶幊?/a>的法則來削減計(jì)算機(jī)程序的耦合問題,它還有種叫法是依賴注入DI(Dependency Injection)。IoC是一種設(shè)計(jì)模式,是一種思想,相當(dāng)于一個(gè)容器,而DI就好比是實(shí)現(xiàn)IOC的一種方式。所謂依賴注入,就是由IoC容器在運(yùn)行期間,動(dòng)態(tài)地將某種依賴關(guān)系注入到對(duì)象之中。這些是我的個(gè)人理解哈,如有不對(duì)的地方,還請(qǐng)大神些指導(dǎo)哈!

3.DI的實(shí)現(xiàn)方式(后續(xù)都會(huì)對(duì)各個(gè)注入方式做代碼展示的)

    構(gòu)造器注入(Constructor Injection):Ioc容器會(huì)智能地選擇選擇和調(diào)用合的構(gòu)造函數(shù)以創(chuàng)建依賴的對(duì)象。如果被選擇的構(gòu)造函數(shù)具有相應(yīng)的參數(shù),Ioc容器在調(diào)用構(gòu)造函數(shù)之前解析注冊(cè)的依賴關(guān)系并自行獲得相應(yīng)參數(shù)對(duì)象;

    屬性注入(Property Injection):如果需要使用到被依賴對(duì)象的某個(gè)屬性,在被依賴對(duì)象被創(chuàng)建之后,Ioc容器會(huì)自動(dòng)初始化該屬性;

    方法注入(Method Injection):如果被依賴對(duì)象需要調(diào)用某個(gè)方法進(jìn)行相應(yīng)的初始化,在該對(duì)象創(chuàng)建之后,Ioc容器會(huì)自動(dòng)調(diào)用該方法。

4.實(shí)例展示

     就拿成都車展來說嘛,高科技的東西多,尤其是虛擬現(xiàn)實(shí)的體檢,很帶勁得。車展中有很多車展商,每個(gè)車展商有不同的車型,車展中的游客有要買車的和不買車的。根據(jù)這種情況做一下代碼的實(shí)現(xiàn):

復(fù)制代碼
1 //人接口 2 public interface IPeople 3 { 4 void ViewCare(); 5 } 6 //要買車的人 7 public class PeopleWithBuyCar : IPeople 8 { 9 //可以通過注入實(shí)現(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('汽車代號(hào):' car.carName ',售價(jià)' car.carPrice); 19 } 20 } 21 //汽車廠商接口 22 public interface ICarVender 23 { 24 ICar SaleCar(); 25 } 26 //大眾廠商 27 public class DaZhong : ICarVender 28 { 29 //可以通過注入實(shí)現(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,這樣就符合依賴倒置原則了,都是依賴于對(duì)象的抽象,從而降低耦合度,方便后期的擴(kuò)展。這里還沒說對(duì)象的注入,可以簡(jiǎn)單的說一下,比如PeopleWithBuyCar類  需要依賴ICarVender接口,但是具體是ICarVender接口的哪一個(gè)實(shí)現(xiàn)類,就是通過注入來完成的,可以把DaZhong類對(duì)象注入給ICarVender,這樣就比較靈活,控制起來相對(duì)方便點(diǎn)。

5.小結(jié)

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    高清不卡一卡二卡区在线| 国产欧洲亚洲日产一区二区| 欧美国产日韩在线综合| 欧美日韩国产免费看黄片| 视频一区二区 国产精品| 中文字幕一区二区久久综合| 嫩呦国产一区二区三区av| 国产精品成人一区二区在线| 国产一区二区精品丝袜| 亚洲精品国男人在线视频| 99久久精品免费看国产高清| 观看日韩精品在线视频| 日韩欧美国产精品中文字幕| 老司机精品视频在线免费看| 国产午夜福利一区二区| 久久国产青偷人人妻潘金莲| 日本加勒比系列在线播放| 久久热在线视频免费观看| 久久精品亚洲精品国产欧美| 日本人妻熟女一区二区三区| 国产精品午夜福利免费在线| 久久精品国产第一区二区三区| 欧美日韩亚洲精品在线观看| 老司机精品视频免费入口| 九九热这里只有精品视频| 亚洲另类欧美综合日韩精品| 男生和女生哪个更好色| 美日韩一区二区精品系列| 国产欧美日韩精品一区二| 日韩不卡一区二区三区色图| 嫩呦国产一区二区三区av| 日本高清加勒比免费在线| 欧美黄色成人真人视频| 99久久免费中文字幕| 99久久婷婷国产亚洲综合精品| 麻豆tv传媒在线观看| 国产精品涩涩成人一区二区三区| 色婷婷丁香激情五月天| 国产不卡一区二区四区| 久久99爱爱视频视频| 一区二区福利在线视频|