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

ali*_*ali 7 c# dependency-injection unity-container asp.net-web-api

我正在使用Microsoft Unity作为IoC容器的新ASP.Net Web API项目。我有些困惑,哪个是正确的。

如果我设置DependencyResolverSystem.Web.Http.HttpConfiguration。然后,我可以调用具有依赖性的API控制器,并且这些依赖性已由Unity框架解决。但是,对于像HomeControllerUnity 这样的MVC控制器,DependencyResolver在我将in 设置为in 之前无法注入任何依赖项System.Web.Mvc

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

MVC控制器依赖关系已成功解决,但API控制器依赖关系未成功解决。如果我在下面添加代码:(取消注释该行

DependencyResolver.SetResolver(new UnityDependencyResolver(container));
Run Code Online (Sandbox Code Playgroud)

只是让您知道项目模板是ASP.Net Web API,而我正在使用Microsoft.Unity。

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

Nko*_*osi 6

如果在同一项目中同时使用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);
Run Code Online (Sandbox Code Playgroud)

注意用于不同名称空间 DependencyResolver