如何在Unity中按名称注册依赖项

时间:2017-06-15 13:50:27

标签: c# .net dependency-injection asp.net-web-api2 unity-container

我在.NET Web Api应用程序中使用unity来实现依赖注入。  这是我的WebApiCongig的相关部分

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);

            }
        }

我已经映射了Generic Repositores但是我无法通过将Manager类注册到其接口来实现。我不想在Manaually上映射每个Manager类。

我评论过我从所有研究中完成的部分。我只想要一个确认,这是我如何做到这一点,因为我不能让我的应用程序现在运行而不做更多的东西

我的经理类:接口看起来像

DutyManager: IDutyManager
UserDetailManager:IUserDetailManager

等。在此先感谢

2 个答案:

答案 0 :(得分:1)

在某些时候,您需要注册每一个。但是,如果你不想手动完成它们中的每一个,你可以做什么&#34;基本上&#34; do,通过反射,加载程序集,遍历每个接口,检查实现该接口的类的数量,如果只有一个,则将接口注册到该类作为未命名的注册。

为什么不知名?好吧,命名注册是无用的,除非您在注册中或ResolvedParameter构造函数中实际使用该名称,并且因为您没有&#34;手工制作&#34;注册时,你最有可能不会参考它们。

请不要忘记,在您的情况下,由于界面和类是泛型,您还需要检查ParameterType

答案 1 :(得分:0)

我找到了这个qn的解决方案。使用Unity,我们可以使用

直接将所有类映射到相应的接口
container.RegisterTypes( AllClasses.FromLoadedAssemblies(),  WithMappings.FromMatchingInterface, WithName.Default);

在这里,Unity按惯例映射,它们像这样映射

DutyManager: IDutyManager
UserDetailManager:IUserDetailManager