如何使用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"的控制器时发生错误。确保控制器有一个无参数的公共构造函数

如何使用Unity在web api 2.0中做构造器级DI

问题是MVC和Webapi都是通过自己的DI工作的,所以它从控制器的构造函数中创建对象,必须是无程序的,但是当你试图让你自己的参数构造函数依赖于你的DI时,你需要安装学习MVC或Webapi来处理你的DI的配置在你使用Unity的情况下,你必须安装Unity .webapi这是代码:

PM> Install-Package Unity。WebAPI -Version 0.10.0