【问题标题】:Dependency Injection with ASP.NET Web API使用 ASP.NET Web API 进行依赖注入
【发布时间】:2014-03-25 12:42:54
【问题描述】:

我正在尝试在我的 ASP.NET Web API 控制器中使用 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;
    }
}

【问题讨论】:

  • 对不起,但“这将是最容易配置的”是基于主要意见的。此外,Autofac、Castle、Ninject、StructureMap、Simple Injector、Unity 都有 Web API 的集成包。

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


【解决方案1】:

您不需要为此使用 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

【讨论】:

  • 非常感谢马克
猜你喜欢
  • 2017-10-22
  • 2018-03-24
  • 1970-01-01
  • 2015-11-08
  • 2013-12-04
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多