Unity 應用程式區塊是一個輕量級、可擴充的依賴注入容器,支援建構函式注入、屬性注入與方法呼叫注入。它能簡化物件建立(特別是分層依賴結構)、支援執行時或配置中指定相依抽象、提供服務定位功能讓用戶端程式碼可快取容器(ASP.NET Session/Application 中特別實用)。
現代業務系統由客製化業務物件與處理特定任務的元件組成。成功關鍵在於鬆耦合設計——更靈活、易維護、易測試(可使用模擬物件)。依賴注入(DI)是構建鬆耦合應用的核心技術,確保類別正確初始化並組裝所有相依物件,特別在相依關係為抽象介面時。
IUnityContainer myContainer = new UnityContainer();
myContainer.Register<IMyObject, MyRealObject>();
IMyObject myRealObjectInstance = myContainer.Get<IMyObject>();
說明:Register 註冊介面到具體類別的型別映射(亦可用配置檔),Get 透過介面鍵取得對應實例。
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 實例並注入。
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] 標記屬性,容器建立物件時自動注入。
同樣使用 [Dependency] 標記方法參數,容器會在建立物件時呼叫該方法並注入相依性。
Unity 適合基於元件的開發模式,能顯著改善架構彈性。但會改變應用程式設計方式,建議團隊評估後選擇性採用。