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

相关问题