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.HttpConfiguration
的DependencyResolver
。然后我可以调用我的 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
的名称空间
我正在使用 Microsoft Unity 作为 IoC 容器开发新的 ASP.Net Web API 项目。我有点困惑哪个是正确的。
如果我设置System.Web.Http.HttpConfiguration
的DependencyResolver
。然后我可以调用我的 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