Я работаю над веб-API ASP.NET, который содержит несколько контроллеров веб-API. Каждый контроллер имеет зависимость от IMessageSender.
public class OrderController: ApiController {
private readonly IMessageSender _msgSender;
public OrderController(IMessageSender msgSender) {
_msgSender = msSender;
}
}
У меня есть 3 разных реализации IMessageSender — CloudMessageSender, InMemoryMessageSender и NServiceBusMessageSender.
public class CloudMessageSender: IMessageSender
{
}
public class InMemoryMessageSender: IMessageSender
{
}
public class NServiceBusMessageSender: IMessageSender
{
}
Я использую Unity и Unity.WebApi для разрешения зависимостей и зарегистрировал 3 именованных регистрации IMessageSender.
container.RegisterType<IMessageSender, CloudMessageSender>("res-cloud");
container.RegisterType<IMessageSender, InMemoryMessageSender>("res-inmem");
container.RegisterType<IMessageSender, NServiceBusMessageSender>("res-nsvc");
Проблема, с которой я столкнулся, заключается в том, что для разных контроллеров мне нужно использовать другую реализацию IMessageSender. Бывший. OrdersController
нужно использовать CloudMessageSender
, а CustomersController
нужно использовать InMemoryMessageSender
. По умолчанию Unity внедрит либо безымянное разрешение, либо (в моем случае) первое.
Как я могу указать или контролировать, какой контроллер должен быть внедрен с какой реализацией IMessageSender?