簡體   English   中英

依賴注入框架能為您做什么?

[英]What does a Dependency Injection framework do for you?

我了解依賴注入的基本概念。 與其擁有大量全局 state,不如將所需內容傳遞給各種對象的構造函數。

但我不明白這個概念如何應用於框架? 依賴注入框架能為您做什么,什么時候應該使用它?

該框架根據某種配置(無論是代碼、XML 文件等)為您連接一切。

基本上是水管。

許多 DI 框架還包括 Aspect Oriented Programming、object 生命周期管理等,但 DI 的基礎是讓您的應用程序啟動並運行,對象之間相互通信。

另一種說法:DI 框架是一段代碼,它調用構造函數並告訴整個事情在完成后運行:)

我使用它的主要目的是讓我無需重新編譯即可插入 object 的新實現。 我只需更改一個配置文件,我的對象就會正確連接在一起。

找出它們如何有用的最好方法是嘗試一些。 我一直想嘗試一下Spring.NET ,它看起來是一個很好的實現。

我真正喜歡 AOP 的一件事是它非常容易在開發版本和生產版本之間移動。 您可以創建非常詳細的日志記錄,然后基本上翻轉 xml 開關,它就消失了。

使用 DI/IOC 的主要優點之一是減少不同類之間的耦合。

當您使用該方法時,您必須配置對象的層次結構,這些層次結構表達了您從其代碼中取出的依賴關系。 這可以變成很多代碼。 即使您使用 DI 框架的代碼部分,它也可以通過讓您以更具表現力的方式進行配置來大大減少配置量:

  • 每當需要 ILogger 時,請使用 FileLogger。
  • 您可以進一步使用約定 go,只要
    請求 I[Name]Controller
    將其替換為 [名稱] 控制器。
  • 您可以讓它為您管理 singleton 對象。 所以你的代碼和其他代碼一樣
    依賴,但 DI 確保您始終獲得相同的實例

我使用的幾個結構圖配置:

    ForRequestedType<ILogger>().TheDefaultIsConcreteType<NLogLogger>();
    //the following injects any property that has a type 
    //that implements IController. (overcomes a regular asp.net limitation with DI)
    SetAllProperties(
         p => p.TypeMatches(t => t.IsConcreteAndAssignableTo(typeof(IController)))
    );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM