I am working on an ASP.NET Web API which contains multiple Web API Controllers. Each controller has a dependency on IMessageSender.
public class OrderController: ApiController {
private readonly IMessageSender _msgSender;
public OrderController(IMessageSender msgSender) {
_msgSender = msSender;
}
}
I have 3 different different implementations of IMessageSender - CloudMessageSender, InMemoryMessageSender and NServiceBusMessageSender.
public class CloudMessageSender: IMessageSender
{
}
public class InMemoryMessageSender: IMessageSender
{
}
public class NServiceBusMessageSender: IMessageSender
{
}
I am using Unity and Unity.WebApi for dependency resolution and have registered 3 named registrations of IMessageSender
container.RegisterType<IMessageSender, CloudMessageSender>("res-cloud");
container.RegisterType<IMessageSender, InMemoryMessageSender>("res-inmem");
container.RegisterType<IMessageSender, NServiceBusMessageSender>("res-nsvc");
The problem that I am facing is that for different controllers I need to use a different Implementation of IMessageSender. Ex. OrdersController
need to use the CloudMessageSender
but CustomersController
need to use the InMemoryMessageSender
. By default Unity will inject either the un-named resolution or (in my case) the first one.
How can I specify or control as to which controller should be injected with which implementation of IMessageSender?