【问题标题】:DependencyResolver in System.Web.Http.HttpConfiguration vs DependencyResolver in System.Web.MvcSystem.Web.Http.HttpConfiguration 中的 DependencyResolver 与 System.Web.Mvc 中的 DependencyResolver
【发布时间】:2017-08-05 13:17:58
【问题描述】:

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

如果我设置System.Web.Http.HttpConfigurationDependencyResolver。然后我可以调用具有依赖关系的 API 控制器,并且依赖关系正在由 Unity 框架解决。但是,对于像 HomeController 这样的 MVC 控制器,在我在 System.Web.Mvc 中设置 DependencyResolver 之前,Unity 无法注入任何依赖项。

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 框架和 WebApi,您可以同时设置两者。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 2014-10-14
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多