我在.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
等。在此先感谢
答案 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