通過前二部分的學習,對象的獲取已非常簡單,在此對前面用過的對象獲取方法進行總結 ,同時對還沒有使用過的方法進行補充。
Unity 容器中獲取對象的方法也包括了泛型方法和對之對應的非泛型重載,在此,僅對泛型方法進行描述。
根據類型獲取對象
我們使用方法 Resolve<T>( ) 來根據類型獲取對象。這種方法是在前二部分使用最多的,用於獲取注冊的默認類型映射的對象。示例代碼如下所示:
根據類型和名稱獲取對象
在此使用方法 Resolve<T>(string name) 來根據類型和名稱獲取對象。此方法用於獲取注冊了命名類型映射的對象。示例代碼如下所示:
獲取指定類型的所有對象
要獲取指定類型的所有對象,我們可以使用 Unity 中的 ResolveAll<T>( ) 方法。比如,在獲取系統中已注冊的所有插件時,這將非常有用。
注意:此方法僅能獲取命名類型注冊映射的對象。
示例代碼如下:
將依賴注入已有的對象
在現實環境中,我們經常無法控制某些對象的創建過程,如 ASP.NET 的頁面,但已需要將依賴注入到這些對象。在這種情況下,我們就可以使用 BuildUp<T>(T existing) 方法對應用指定類型的依賴。
我們用一個簡單的方法來模擬這種情況:
從上面的代碼中我們可以看到,假如 tel 是在方法外被創建的話,通過使用 BuildUp 方法後,依賴就被自動應用到了 tel 對象上。
注意:BuildUp 方法僅能適用屬性注入和方法調用注入,因為它不執行請求對象的構造函數。
小結
在本文中,我們簡單描述了對象獲取的幾種方法,可以看出,使用 Unity 容器在注冊類型映射後,對象的獲取是非常簡單的。
本文配套源碼