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

DependencyResolver in System.Web.Http.HttpConfiguration vs DependencyResolver in System.Web.Mvc

我正在使用 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 控制器依赖项已成功解析,但 API 控制器依赖项未成功解析。如果我在下面添加代码:(取消注释行)

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

只是告诉你项目模板是 ASP.Net Web API 我正在使用 Microsoft.Unity.

我应该同时设置 DependencyResolver 还是我做错了什么?

如果在同一个项目中同时使用 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

的名称空间