I am trying to use DI in my ASP.NET Web API Controller. Apparently there are a few implementations out there. I was just wondering which of these (Castle, Ninject, unity etc.) would be the easiest to configure/maintain in combination with ASP.NET Web API? I am getting this error:
DI.Controllers.ImportJsonController' does not have a default constructor.
If I add an empty constructor, then the constructor with IFilter
is ignored.
This is my 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;
}
}
You don't need a DI Container for this. Here's how to do it by hand:
public class PoorMansCompositionRoot : IHttpControllerActivator
{
public IHttpController Create(
HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)
{
if (controllerType == typeof(ImportJsonController))
return new ImportJsonController(new MyFilter());
return null;
}
}
You need to tell ASP.NET Web API about this class (eg in your Global.asax):
GlobalConfiguration.Configuration.Services.Replace(
typeof(IHttpControllerActivator),
new PoorMansCompositionRoot());
You can read about all the details here: http://blog.ploeh.dk/2012/09/28/DependencyInjectionandLifetimeManagementwithASP.NETWebAPI
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.