我正在使用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