0

我在我的.NET Web Api應用程序中使用unity來實現依賴注入。 這裏是我WebApiCongig的培訓相關部分如何註冊在Unity中通過名稱的依賴關係

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 

      var container = new UnityContainer(); 
      AppDependancyRegistry.Register(container); 
      config.DependencyResolver = new UnityResolver(container); 

     } 
    } 

這裏是我的AppDependancyRegistry類

public static class AppDependancyRegistry 
     { 
      public static void Register(UnityContainer container) 
      { 
        container.RegisterType(typeof(IBaseRepository<>), typeof(BaseRepository<>)); 
        //container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default); 

      } 
     } 

我制訂通用Repositores,但我不能與Manager類註冊到其接口打通。我不想Manually映射經理類的每一個。

我已經評論了我從所有研究中完成的部分。我只是想確認,這是我要做的事,因爲我不能讓我的應用程序運行現在不用做一些更多的東西

我的管理類:界面看起來像

DutyManager: IDutyManager 
UserDetailManager:IUserDetailManager 

等在此先感謝

+0

*我不想經理班的每一個地圖Manaually * - 爲什麼不? –

+0

更多的工作..是不好的。是我的概念。瞭解一次是好的 –

+0

您可以批量註冊單個界面的所有實現,但不是多個界面是我的理解。至少在城堡,ninject,結構圖和tinyioc。我沒有使用過團結。 –

回答

0

我找到了這個qn的解決方案。使用Unity我們直接可以用

container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default); 

這裏,團結地圖按照慣例地圖所有類respecive接口,他們繪製這樣

DutyManager: IDutyManager 
UserDetailManager:IUserDetailManager 
1

您需要在某些時候註冊它們中的每一個。但是,如果你不想手動執行每一個接口,你可以「基本上」做的是通過反射,加載程序集,迭代每個接口,檢查有多少類實現該接口,如果有隻有一個,將該接口註冊爲該類,作爲未命名的註冊。

爲什麼不命名?那麼,除非您真的在註冊中或在ResolvedParameter構造函數中使用名稱,並且由於您不是「手工製作」註冊,所以命名註冊是毫無用處的,因此您最有可能不會引用它們。

不要忘了,雖然你的情況,因爲界面和類是泛型,你也需要檢查ParameterType

相關問題