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



我正在使用unity在我的.NET Web Api应用程序中实现依赖注入。 这是我的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);
            }
        }

我已经映射了通用存储库,但我无法将管理器类注册到其接口。我不想把每个经理类都映射出来。

我已经评论了我从所有研究中所做的部分。我只是想要一个确认,这就是我的做法,因为如果不做更多的事情,我现在无法让我的应用程序运行

我的管理器类:接口看起来像

DutyManager: IDutyManager
UserDetailManager:IUserDetailManager

等提前致谢

在某些时候,您将需要注册它们中的每一个。但是,如果您不想手动执行其中的每一个,则"基本上"可以做的是通过反射加载程序集,遍历每个接口,检查有多少个类实现该接口,如果只有一个,则将该类的接口注册为未命名注册。

为什么未命名?好吧,命名注册是无用的,除非您在注册或ResolvedParameter构造函数中实际使用该名称,并且由于您不是"手工制作"注册,因此您很可能不会引用它们。

不要忘记,在您的情况下,由于接口和类是泛型的,因此您还需要检查ParameterType

我找到了这个qn的解决方案。 使用 Unity,我们可以直接将所有类映射到特定接口

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

在这里,Unity 按约定映射,他们像这样映射

DutyManager: IDutyManager
UserDetailManager:IUserDetailManager

最新更新