ASP.NET Web API的dependency injection

我试图在我的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; } } 

你不需要一个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