ASP.NET Web API依赖注入

Tyr*_*one 6 c# asp.net dependency-injection asp.net-web-api

我想知道是否可以在ASP.NET Web API中进行依赖注入(自定义构造函数),而无需使用Unity或StructureMap等第三方库,也无需使用Entity Framework.

我想要实现的是一个带有构造函数的控制器,例如:

public Controller(IDatabaseConnector connector) { ... }
Run Code Online (Sandbox Code Playgroud)

我知道对于MVC,您可以通过继承DefaultControllerFactory然后重写GetControllerInstance函数来创建自定义ControllerFactory.所以我相信Web API有另一种选择.

Fra*_*zzi 4

首先你应该定义你自己的IHttpControllerActivator

public class CustomControllerActivator : IHttpControllerActivator
{
    public IHttpController Create(
        HttpRequestMessage request,
        HttpControllerDescriptor controllerDescriptor,
        Type controllerType)
    {
        // Your logic to return an IHttpController
        // You can use a DI Container or you custom logic
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您应该替换以下中的默认激活器Global.asax

protected void Application_Start()
{
    // ...

    GlobalConfiguration.Configuration.Services.Replace(
        typeof(IHttpControllerActivator),
        new CustomControllerActivator());
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用丰富的Controller构造函数:

public class UserController
{
    public UserController(
        IMapper mapper,
        ILogger logger,
        IUsersRepository usersRepository)
    {
        // ...
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)