首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Unity 容器入門指南:IoC 與 DI 核心概念、注入模式與基礎用法

     編輯:關於.NET

什麼是 Unity?

Unity 應用程式區塊是一個輕量級、可擴充的依賴注入容器,支援建構函式注入、屬性注入與方法呼叫注入。它能簡化物件建立(特別是分層依賴結構)、支援執行時或配置中指定相依抽象、提供服務定位功能讓用戶端程式碼可快取容器(ASP.NET Session/Application 中特別實用)。

依賴注入為何重要?

現代業務系統由客製化業務物件與處理特定任務的元件組成。成功關鍵在於鬆耦合設計——更靈活、易維護、易測試(可使用模擬物件)。依賴注入(DI)是構建鬆耦合應用的核心技術,確保類別正確初始化並組裝所有相依物件,特別在相依關係為抽象介面時。

最基礎的 Unity 程式碼

IUnityContainer myContainer = new UnityContainer();
myContainer.Register<IMyObject, MyRealObject>();
IMyObject myRealObjectInstance = myContainer.Get<IMyObject>();

說明:Register 註冊介面到具體類別的型別映射(亦可用配置檔),Get 透過介面鍵取得對應實例。

三種注入模式實戰

1. 建構函式注入

public class MyObject {
    public MyObject(MyDependentClass myInstance) {
        myInstance.UserName = myInstance.ToString();
        Console.WriteLine($"My name is {myInstance.UserName}.");
    }
}

// 使用容器自動解析相依性
IUnityContainer uContainer = new UnityContainer();
MyObject myInstance = uContainer.Get<MyObject>();

容器自動建立 MyDependentClass 實例並注入。

2. 屬性(Setter)注入

public class MyObject {
    private SomeOtherObject _dependentObject;
    [Dependency]
    public SomeOtherObject DependentObject {
        get { return _dependentObject; }
        set { _dependentObject = value; }
    }
}

IUnityContainer uContainer = new UnityContainer();
MyObject myInstance = uContainer.Get<MyObject>();
Console.WriteLine($"Property injection object is {myInstance.DependentObject}.");

以 [Dependency] 標記屬性,容器建立物件時自動注入。

3. 方法呼叫注入

同樣使用 [Dependency] 標記方法參數,容器會在建立物件時呼叫該方法並注入相依性。

Unity 核心特性總覽

  • 物件組合機制:支援包含其他相依物件的複雜物件圖建構
  • Register/Get 方法:配置容器映射與單例、解析含相依性的物件實例
  • IoC 功能:透過建構函式、屬性、方法注入預設定物件
  • 容器繼承階層:支援子容器,物件查詢可從子容器傳遞至父容器
  • 配置系統整合:支援從 XML 標準配置讀取設定
  • 無侵入式設計:不需裝飾類別定義(屬性/方法注入除外),無限制類別宣告
  • 自訂擴充:支援開發者實作自訂容器擴充(如快取、其他建構策略)

適用場景建議

Unity 適合基於元件的開發模式,能顯著改善架構彈性。但會改變應用程式設計方式,建議團隊評估後選擇性採用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved