我正在使用Microsoft Unity作为IoC容器开发新的ASP.Net Web API项目。我有点困惑哪一个是正确的。
如果我设置DependencyResolver
的{{1}}。然后我能够调用我的API控制器具有依赖性,并且Unity框架正在解析依赖关系。但是,对于像System.Web.Http.HttpConfiguration
这样的MVC控制器,在HomeController
中设置DependencyResolver
之前,Unity无法注入任何依赖关系。
已解决API控制器依赖关系,但不解决MVC控制器依赖关系。如果我添加以下代码:
System.Web.Mvc
MVC Controller依赖项已成功解析,但API控制器依赖项未解析。如果我添加以下代码:(取消注释该行)
public class IocConfig
{
public static void Register(HttpConfiguration config)
{
var container = UnityConfig.GetConfiguredContainer();
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
config.DependencyResolver = new UnityResolver(container);
//DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
告诉您项目模板是ASP.Net Web API,我使用的是Microsoft.Unity。
我应该同时设置DependencyResolver.SetResolver(new UnityDependencyResolver(container));
还是我做错了什么。?
答案 0 :(得分:3)
如果在同一个项目中同时使用MVC和Web API,则需要设置两个解析器。如果在相同的代码位置执行此操作,则通过为其名称空间添加前缀来区分解析器。
var container = UnityConfig.GetConfiguredContainer();
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
//MVC
DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container));
//Web API
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
请注意用于不同DependencyResolver