使用ASP.NET Web API进行依赖注入

时间:2014-03-25 12:42:55

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

我正在尝试在ASP.NET Web API Controller中使用DI。显然有一些实现。我只是想知道哪些(Castle,Ninject,unity等)最容易配置/维护与ASP.NET Web API结合?我收到了这个错误:

  

DI.Controllers.ImportJsonController'没有默认构造函数。

如果我添加一个空构造函数,则忽略IFilter的构造函数。

这是我的控制者:

public class ImportJsonController : ApiController
{
    private readonly IFilter _filter;

    public ImportJsonController(IFilter filter)
    {
        _filter = filter;
    }

    public HttpResponseMessage Post([FromBody]dynamic value)
    {
        //do something
        return response;
    }
}

1 个答案:

答案 0 :(得分:4)

您不需要DI容器。以下是手工操作的方法:

public class PoorMansCompositionRoot : IHttpControllerActivator
{
    public IHttpController Create(
        HttpRequestMessage request,
        HttpControllerDescriptor controllerDescriptor,
        Type controllerType)
    {
        if (controllerType == typeof(ImportJsonController))
            return new ImportJsonController(new MyFilter());

        return null;
    }
}

您需要告诉ASP.NET Web API这个类(例如在您的Global.asax中):

GlobalConfiguration.Configuration.Services.Replace(
    typeof(IHttpControllerActivator),
    new PoorMansCompositionRoot());

您可以在此处阅读所有详细信息:http://blog.ploeh.dk/2012/09/28/DependencyInjectionandLifetimeManagementwithASP.NETWebAPI