我正在尝试在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;
}
}
答案 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