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

Unity 1.x 依賴注入容器入門實戰:從零構建第一個 DI 應用

     編輯:關於.NET

Unity 核心定位

輕量級、可擴展 DI 容器,支持構造函數/屬性/方法三種注入。本質是智能對象工廠+生命周期管理器,將「依賴誰」與「誰創建依賴」分離。適用可擴展/可插拔系統,簡單應用引入會增加複雜度,有微小性能開銷。

領域模型:Telephone 需要 IDialer/Dialer

public interface IDialer { void Dial(string number); }
public abstract class Dialer : IDialer { public abstract void Dial(string number); }
public class ButtonDialer : Dialer { public override void Dial(string n) => Console.WriteLine("Button: " + n); }
public class PlateDialer : Dialer { public override void Dial(string n) => Console.WriteLine("Plate: " + n); }
public class Telephone {
    public Dialer Dialer { get; set; } // 屬性注入點
    public Telephone(IDialer dialer) { } // 構造函數注入點
    public void Initialize(IDialer dialer) { } // 方法注入點
}
Telephone 類
圖 1:Telephone 類結構
IDialer 接口
圖 2:IDialer 接口定義
Dialer 基類
圖 3:Dialer 抽象基類

容器初始化雙軌:代碼 vs XML 配置

代碼式註冊(開發期主流)

using Microsoft.Practices.Unity;

var container = new UnityContainer();
container.RegisterType<IDialer, ButtonDialer>(); // 接口映射
var phone = container.Resolve<Telephone>(); // 自動構造注入 IDialer
代碼註冊輸出
圖 4:代碼式註冊解析成功

XML 配置式註冊(部署期靈活)

```xml
```
var container = new UnityContainer();
var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container); // 載入配置
var phone = container.Resolve<Telephone>(); // 同樣解析方式
XML 配置輸出
圖 5:XML 配置驅動同樣效果

三大注入模式漸進體驗

1. 構造函數注入——默認自動模式

Telephone 定義 public Telephone(IDialer dialer),容器 Resolve 時自動解析 IDialer 映射並調用構造函數。單構造函數零配置;多構造需 [InjectionConstructor] 指定。

構造函數注入
圖 6:構造函數注入合併註冊與解析

2. 屬性注入——[Dependency] 標記

public class Telephone {
    [Dependency]
    public Dialer Dialer { get; set; } // 標記抽象類類型屬性
}

配置補充 Dialer 映射:

```xml ```

構造函數可註釋,容器仍通過屬性注入完成依賴裝配。

屬性注入標記
圖 7:[Dependency] 標記屬性注入點
Dialer 映射配置
圖 8:配置 Dialer 抽象類映射

3. 方法調用注入——[InjectionMethod] 標記

public class Telephone {
    [InjectionMethod]
    public void Initialize(IDialer dialer) { /* 初始化邏輯 */ }
}

容器解析後自動調用 Initialize 並注入參數。構造函數與屬性標記可共存,按構造→屬性→方法順序執行。

方法注入標記
圖 9:[InjectionMethod] 標記方法注入點

總結:Unity 入門三部曲

  1. 建模:接口隔離依賴,類定義注入點(構造/屬性/方法)
  2. 註冊:代碼或 XML 建立契約→實現映射,配置生命周期
  3. 解析:Resolve 獲取對象,容器遞歸構建完整依賴圖

掌握這三步,即擁有了在 .NET 應用中實施依賴注入的核心能力。

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