I would like to know if it is possible to do dependency injection (custom constructor) in a ASP.NET Web API without the use of third party libraries such as Unity or StructureMap and without Entity Framework.
What I would like to achieve is have a controller with a constructor such as:
public Controller(IDatabaseConnector connector) { ... }
I know for MVC you can make a custom ControllerFactory by inheriting from DefaultControllerFactory and then overriding the GetControllerInstance function. So I am sure there is an alternative for Web API.
At first you should define your own 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
}
}
Then you should replace the default activator in the Global.asax
:
protected void Application_Start()
{
// ...
GlobalConfiguration.Configuration.Services.Replace(
typeof(IHttpControllerActivator),
new CustomControllerActivator());
}
Now you can use your rich Controller
constructor:
public class UserController
{
public UserController(
IMapper mapper,
ILogger logger,
IUsersRepository usersRepository)
{
// ...
}
// ...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With