如何使用Unity在web api 2.0中做构造器级DI
本文关键字:构造器 DI Unity 何使用 web api | 更新日期: 2023-09-27 18:08:35
我使用Unity在ASP中做依赖注入。. Net MVC通过创建自定义控制器激活器类
public class CustomControllerActivator : IControllerActivator
{
public IController Create(RequestContext requestContext, Type controllerType)
{
var controller = default(IController);
if (controllerType != default(Type))
{
controller = ServiceLocator.Current.GetInstance(controllerType) as IController;
}
return controller;
}
}
,然后是自定义依赖控制器解析器类,如下所示,
public class CustomControllerDependencyResolver : IDependencyResolver
{
public object GetService(Type serviceType)
{
var resolvedObject = default(object);
if (serviceType == typeof(IControllerActivator))
{
resolvedObject = new CustomControllerActivator();
}
return resolvedObject;
}
public IEnumerable<object> GetServices(Type serviceType)
{
var resolvedObjects = default(IEnumerable<Object>);
resolvedObjects = ServiceLocator.Current.GetInstances(serviceType);
return resolvedObjects;
}
}
然后我将以下行添加到global.asax.cs文件中,
DependencyResolver.SetResolver(new CustomControllerDependencyResolver());
注册我的自定义依赖解析器。
上面的方法适用于MVC控制器,但当我过去对webapi控制器做同样的事情时,它失败了,尝试创建类型为"CustomerController"的控制器时发生错误。确保控制器有一个无参数的公共构造函数
问题是MVC和Webapi都是通过自己的DI工作的,所以它从控制器的构造函数中创建对象,必须是无程序的,但是当你试图让你自己的参数构造函数依赖于你的DI时,你需要安装学习MVC或Webapi来处理你的DI的配置在你使用Unity的情况下,你必须安装Unity .webapi这是代码:
PM> Install-Package Unity。WebAPI -Version 0.10.0