System.Web.Http.HttpConfiguration中的DependencyResolver与System.Web.Mvc中的DependencyResolver有什么区别?

10

我正在使用Microsoft Unity作为IoC容器,开发新的ASP.Net Web API项目。有一些疑惑不确定哪种方式是正确的。

如果我设置System.Web.Http.HttpConfigurationDependencyResolver,那么我就能够调用有依赖关系的API控制器,而且这些依赖关系会被Unity框架解决。但是对于像HomeController这样的MVC控制器,Unity无法注入任何依赖项,除非我在System.Web.Mvc中设置DependencyResolver

API控制器的依赖关系已经解决,但MVC控制器的依赖关系没有。如果我添加下面的代码:

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));
    }
}

已成功解决MVC Controller依赖关系,但API Controller依赖关系未能解决。如果我添加以下代码:(取消注释该行)

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

告诉您一下,项目模板是ASP.Net Web API,我正在使用Microsoft.Unity。

我应该设置DependencyResolver吗?还是说我做错了什么?


3
如果你的项目同时包含MVC框架和WebApi,那么你需要同时设置两个。 - Tieson T.
1个回答

7

如果在同一个项目中同时使用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 使用的命名空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接