1. 程式人生 > 其它 >使用Unity建立依賴注入依賴注入生命週期:註冊、解析、銷燬   註冊解析銷燬

使用Unity建立依賴注入依賴注入生命週期:註冊、解析、銷燬   註冊解析銷燬

這篇文章翻譯自《Dependency Injection With Unity》第三章。文中提到的類似“前幾節”的內容您不必在意,相信您可以看懂的。

P.S:如果您想看到的是關於Unity 3D的內容,您可以輕擊返回按鈕了。

    在前幾節,您看到為什麼要使用依賴注入以及依賴注入和其他解耦方法的區別。在本章中您將看到怎麼樣使用Unity依賴注入容器去更簡單的在您的應用程式中新增依賴注入框架。在這個過程中,您將看到怎樣將Unity應用在實際應用程式中的一些例子

依賴注入生命週期:註冊、解析、銷燬

在前幾個章節中,您看到了ManagementController類有一個構造方法期望在繼續構造之前注入以後型別為實現餓了ItenantStore型別的物件,有兩件事情發生在這裡:

一些東西需要決定怎麼樣史麗華一個實現了ITenantStore藉口的型別的物件,然後再應用程式中史麗華這個物件和ManagementController物件。

       我們將參考第一個任務作為Registration和第二個作為分辨者,在接下來以同樣的效果,應用程式將會結束使用ManagementController物件,等待垃圾回收機制回收,同樣,它也要通知垃圾回收機取銷燬這個ITenantStore型別的物件,如果其他客戶端類不在使用這個例項。

      Unity容器可以管理註冊、解析、銷燬的週期,以便我們簡單的在您的應用程式中使用依賴注入。接下來的章節示例將用一個簡單的例子演示這個週期。再接下來,您將看到一個更加複雜的實際應用例項並學習其他一些使用方式。

   註冊

使用Unity容器,您可以註冊一個對映集合去決定一個建構函式(屬性或者方法)去使用哪個實際型別,唯一標識這個型別作為一個結構型別或者父型別去注入。一個提示,這裡有一份在ManagementController型別中的構造方法顯示依賴一個實現了ITenantStore結構的型別的物件。

public ManagementController(ITenantSore tenantStore)
{
      this.tenantStore = tenantStore; 
}

以下的程式碼示例怎樣建立一個Unity容器並註冊一個在ManagementController例項化時需要的ITenantStore型別的實際型別

var container = new UnityContainer();
container.RegisterType<ITenantStore, TenantStore>();

RegsterType方法表示告訴容器在一個建構函式或者方法或者屬性需要一個ITenantStore例項注入時,例項化一個TenantStore物件給它。這個例子是一個很簡單的型別對映讓您可以定義使用Unity容器。在後面的章節中,您將看到在Unity容器中註冊型別和物件的一些方法,可以適用於更復雜的情形,具有更好的靈活性。

解析

RegisterType方法的使用方式已經在前幾節中定義了介面型別和實際型別的對映。在例項化ManagementController和TenantStore物件時,您必須呼叫Resolve方法。

var controller = container.Resolve<ManagementController>();

在這個示例中,您不需要直接去例項化ManagementController,而是使用Unity容器以便容器可以解析所有的依賴關係。在這個簡單的示例中,依賴關係的解析式對一個ITenantStore物件的。在這個場景中,Unity容器第一個構造TenantStore物件並且通過它去構造一個ManagementController類。

銷燬

在這個簡單的示例中在前幾節中掩飾了註冊和解析型別,應用程式存在一個ManagementController型別的controller變數,當您呼叫Resolve方法時,Unity容器建立以個新的TenantStore例項去注入。當controller變數離開它的作用域,這個TenantStore物件也將進入垃圾回收集合中。