2014-03-25 144 views
1

我想在我的ASP.NET Web API控制器中使用DI。顯然這裏有一些實現。我只是想知道哪些(Castle,Ninject,unity等)與ASP.NET Web API一起配置/維護最簡單?如果我添加一個空的構造,然後用IFilter構造被忽略ASP.NET Web API依賴注入

DI.Controllers.ImportJsonController' does not have a default constructor.

:我得到這個錯誤。

這是我的控制器:

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

對不起,但「最容易配置」是基於主要觀點。另外,Autofac,Castle,Ninject,StructureMap,Simple Injector,Unity都有Web API的集成包。 – Steven

回答

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

+0

非常感謝馬克 – user603007