我正在尝试在我的 ASP.NET Web API Controller 中使用 DI。显然那里有一些实现。我只是想知道其中哪些(CaSTLe、Ninject、unity 等)与 ASP.NET Web API 结合使用时最容易配置/维护?我收到此错误:
DI.Controllers.ImportJsonController' does not have a default constructor.
如果我添加一个空的构造函数,那么带有 IFilter 的构造函数将被忽略。
这是我的 Controller :
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
