2013-11-14 145 views
-1

在我的WebApi的引導程序類中,我試圖根據其接口類型註冊名爲「Facade」的類的新實例。統一參數構造函數異常

在這種被註冊的類型中,它需要一個'CRUDOperator'的新實例,它的構造函數中也有一個新的'Adapter'實例。我正在嘗試做什麼?我目前只是收到一個例外,即超載參數不正確。

public static class Bootstrapper 
{ 
    public static void Initialise() 
    { 
     var container = BuildUnityContainer(); 

     GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 
    } 

    private static IUnityContainer BuildUnityContainer() 
    { 
     var container = new UnityContainer(); 

     *****ERROR***** 
     container.RegisterType<IFacade,Facade>(new CRUDOperatorSelector(new Adapter())); 

     return container; 
    } 
} 

回答

0

團結是能夠解決的具體類型而無需註冊他們的,所以如果你的情況類型CRUDOperatorSelector和適配器具體類型(和我假設他們),你只需要註冊類型作爲門面實施的IFACade並解決它。然後,Unity將創建每個依賴項的一個實例,並將其傳遞給Facade的構造函數。 如果其中某些類型實現了抽象(一個接口或抽象類),它們也會註冊它們。

+0

是的,你是正確的,他們是具體的實現。所以它就像創建一個新的統一容器一樣簡單.....註冊類型如圖所示.... container.RegisterType (); ....並且不需要嘗試和注入任何東西進入這種註冊類型? – user1352057

+0

是的,它應該是這麼簡單;)額外的問題是什麼樣的生命週期你需要這些類型 - 默認情況下,每當團結需要解決它們時,你會得到這些類型的新實例 - 例如,如果有其他類型在他們的構造函數中接受CRUDOperatorSelector和Adapter,他們每個人都會得到一個單獨的新實例 - 我希望你知道我在這裏的意思;) –

+0

@Prezemek Walendowski。謝謝!就是這樣,看起來我很想去探索!你能回答這個問題,所以我可以選擇你的答案是正確的。 – user1352057