Skip to main content
 首页 » 编程设计

c#之使用 ASP.NET Web API 进行依赖注入(inject)

2024年02月13日27powertoolsteam

我正在尝试在我的 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