gpt4 book ai didi

c# - System.Web.Http.HttpConfiguration 中的 DependencyResolver 与 System.Web.Mvc 中的 DependencyResolver

转载 作者:太空狗 更新时间:2023-10-29 21:37:55 33 4
gpt4 key购买 nike

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

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

API Controller 依赖关系已解决,但 MVC Controller 依赖关系未解决。如果我添加以下代码:

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 还是我做错了什么?

最佳答案

如果在同一项目中同时使用 MVC 和 Web API,则需要同时设置两个解析器。如果在相同的代码位置这样做,则通过在它们的 namespace 前加上前缀来区分解析器。

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

的命名空间

关于c# - System.Web.Http.HttpConfiguration 中的 DependencyResolver 与 System.Web.Mvc 中的 DependencyResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42798955/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com