日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

控制反转(Ioc)和依赖注入(DI)

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 控制反转(Ioc)和依赖注入(DI) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

控制反轉IOC, 全稱 “Inversion of Control”。依賴注入DI, 全稱 “Dependency Injection”。

面向的問題:軟件開發中,為了降低模塊間、類間的耦合度,提倡基于接口的開發,那么在實現中必須面臨最終是有“誰”提供實體類的問題。(將各層的對象以松耦合的方式組織起來,各層對象的調用面向接口。)

當一個類的實例需要另一個類的實例協助時,在傳統的程序設計過程中,通常有調用者來創建被調用者的實例。

然后,采用依賴注入原則,創建被調用者的實例的工作不再由調用者完成,而是由IOC容器來完成,這就是“控制反轉”的意思,然后,將其注入調用者,因此也稱為 “依賴注入”。

Martin Fowler,在其著名的文章《Inversion of Control Containers and the Dependency Injection pattern》中將具體依賴注入劃分為三種形式,即構造器注入、屬性(設置)注入和接口注入。

習慣將其劃分為一種(類型)匹配和三種注入:

  • 類型匹配(Type Matching):雖然我們通過接口(或者抽象類)來進行服務調用,但是服務本身還是實現在某個具體的服務類型中,這就需要某個類型注冊機制來解決服務接口和服務類型之間的匹配關系;
  • 構造器注入(Constructor Injection):IoC容器會智能地選擇選擇和調用適合的構造函數以創建依賴的對象。如果被選擇的構造函數具有相應的參數,IoC容器在調用構造函數之前解析注冊的依賴關系并自行獲得相應參數對象;
  • 屬性注入(Property Injection):如果需要使用到被依賴對象的某個屬性,在被依賴對象被創建之后,IoC容器會自動初始化該屬性;
  • 方法注入(Method Injection):如果被依賴對象需要調用某個方法進行相應的初始化,在該對象創建之后,IoC容器會自動調用該方法

創建一個控制臺程序,定義如下幾個接口(IA、IB、IC和ID)和它們的實現類(A、B、C、D)。在類型A中定義了三個屬性B、C和D,其參數類型分別為IB、IC和ID。

其中,

屬性B作為構函數的參數,認為它會以構造器注入的方式被初始化 (??);

屬性C應用了DependencyAttribute特性,意味著這是一個需要以屬性注入方式被初始化的依賴屬性;

屬性D則通過方法Initialize初始化,該方法上應用了特性InjectionMethodAttribute, 意味著這是一個方法注入,在A對象被Ioc容器創建的時候,D會被自動調用。

?

Microsoft有一個輕量級的IoC框架Unity, 支持構造器注入,屬性注入,方法注入。對于C#語言,由于語法元素上本身較其他語言豐富許多,如何實施注入還有些技巧和特色之處。

下面介紹如下:

測試類:

namespace UnityDemo {public interface IA { }public interface IB { }public interface IC { }public interface ID { }public class A : IA{public IB B { get; set; }[Dependency]public IC C { get; set; }public ID D { get; set; }public A(IB b){this.B = b;}[InjectionMethod]public void Initialize(ID d){this.D = d;}}public class B : IB { }public class C : IC { }public class D : ID { } }

配置注冊:

<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/></configSections><unity><containers><container name="defaultContainer"><register type="UnityDemo.IA, UnityDemo" mapTo="UnityDemo.A, UnityDemo"/><register type="UnityDemo.IB, UnityDemo" mapTo="UnityDemo.B, UnityDemo"/><register type="UnityDemo.IC, UnityDemo" mapTo="UnityDemo.C, UnityDemo"/><register type="UnityDemo.ID, UnityDemo" mapTo="UnityDemo.D, UnityDemo"/></container></containers></unity><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup> </configuration>

Main方法中,創建一個Ioc容器的UnityContainer對象,并加載配置信息對其初始化,然后調用它的泛型的Resolve方法創建一個實現了泛型接口IA的對象。

最后將返回對象轉換成類型A, 并逐一檢驗B,C和D屬性是否為空,即初始化情況。

namespace UnityDemo {class Program{static void Main(string[] args){var container = new UnityContainer();var configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName) as UnityConfigurationSection;configuration.Configure(container, "defaultContainer");A a = container.Resolve<IA>() as A;if (null != a){Console.WriteLine("a.B==null? {0}", a.B == null ? "Yes" : "No");Console.WriteLine("a.C==null? {0}", a.C == null ? "Yes" : "No");Console.WriteLine("a.D==null? {0}", a.D == null ? "Yes" : "No");}}} }

?

執行結果:

?

分別體現了接口注入、構造器注入(屬性B)、屬性注入(屬性C)和方法注入(屬性D)。

?

JACK D. @ NJ USA

?

轉載于:https://www.cnblogs.com/Dlonghow/p/5415421.html

總結

以上是生活随笔為你收集整理的控制反转(Ioc)和依赖注入(DI)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 新婚之夜玷污岳丰满少妇在线观看 | 午夜视频导航 | 国产精欧美一区二区三区白种人 | 观看av在线 | 午夜激情久久 | 国产无人区码熟妇毛片多 | 欧美成年网站 | 午夜网页| 天堂视频在线观看免费 | 青春草国产视频 | 国产又粗又硬又长又爽的演员 | 精品国产欧美一区二区 | 玩日本老头很兴奋xxxx | 国产刺激高潮av | 国产精品久久毛片av大全日韩 | 亚洲成成品网站 | 激情丁香网| 黑人巨大精品欧美一区二区蜜桃 | 一级片播放 | 波多野结衣福利视频 | 久久男人精品 | 日本一区二区免费电影 | 国产激情文学 | 国产第一网站 | 国产美女特级嫩嫩嫩bbb | 偷拍xxxx| 国产精品久久久久久久久 | 西西午夜视频 | 国产精品久久久久免费 | 99riav国产| 亚洲h片 | 四房婷婷 | 97免费在线视频 | 超碰黄色 | www.夜色 | 久久精品国产亚洲av嫖农村妇女 | 中文字幕自拍 | 欧洲久久久久 | 中文字幕一区二区三区乱码在线 | 久久久久影视 | 欧美一区二区久久 | 一本色道久久综合无码人妻 | 日日操夜夜操狠狠操 | 在线看的av | 欧美日p视频 | 久久九九国产精品 | 色噜噜综合 | 天狂传说之巴啦啦小魔仙 | 91pao| 免费成人高清在线视频 | 国产在线麻豆精品观看 | 五月深爱网 | 国产免费毛卡片 | 99热这里有精品 | av男人网| 性做久久久 | 日韩在线播放一区二区 | 欧美老熟妇一区二区 | 超碰66 | 亚洲成人a∨ | 女人和拘做爰正片视频 | 日人视频| 亚洲黄色在线观看视频 | 奇米在线视频 | 精品无码av一区二区三区四区 | 国产一区二区三区18 | 国产视频福利在线观看 | 色女人在线 | 蜜桃91麻豆精品一二三区 | 亚a在线| 波多野结衣有码 | 综合久久99 | 久久久人人人 | 玖玖爱国产 | 鲁一鲁一鲁一鲁一av | 亚洲一区高清 | 亚洲一区二区三区免费在线观看 | 免费观看毛片 | 免费在线观看av网站 | 日日爱夜夜操 | 国产精品久久久久久在线观看 | 黄页视频在线免费观看 | 亚洲伦理在线观看 | 性xxxx另类xxⅹ | 午夜影院色 | 国产情侣久久 | 日韩小视频在线 | 国产专区一区二区三区 | 超碰夫妻 | 人成午夜 | 伊人精品综合 | 一区二区三区在线观看 | 4438x亚洲最大 | 国产又黄又粗又猛又爽视频 | 1000部拍拍拍18勿入免费视频 | 强制憋尿play黄文尿奴 | 亚洲乱码精品久久久久 | 欧美色图小说 | 都市激情 亚洲 |