System.Web.Http.HttpConfiguration中的DependencyResolver与System.Web.Mvc中的DependencyResolver

时间:2017-03-15 00:18:20

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

我正在使用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)); 还是我做错了什么。?

1 个答案:

答案 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

的命名空间