Я использую Autofac и хочу иметь несколько реализаций интерфейса. Как настроить Autofac для разрешения зависимостей на основе текущего типа?
В частности, у меня есть один интерфейс и несколько реализаций, которые должны быть соединены вместе.
Позвольте мне объяснить (фиктивные классы):
public interface IMessageHandler
{
void Handle(Message message);
}
public class LoggingMessageHandler : IMessageHandler
{
private IMessageHandler _messageHandler;
public LoggingMessageHandler(IMessageHandler messageHandler)
{
_messageHandler = messageHandler;
}
public void Handle(Message message)
{
// log something
_messageHandler.Handle(message);
}
}
public class DoSomethingMessageHandler : IMessageHandler
{
private IMessageHandler _messageHandler;
public DoSomethingMessageHandler (IMessageHandler messageHandler)
{
_messageHandler = messageHandler;
}
public void Handle(Message message)
{
// do something
_messageHandler.Handle(message);
}
}
В нижней части цепочки может быть IMessageHandler, который не передает сообщение на следующую.
Если мне нужна следующая цепочка:
TopLevelClass -> LoggingMessageHandler -> DoSomethingMessageHandler -> FinalHandler
Как я могу указать Autofac на
- передать
LoggingMessageHandlerвTopLevelClass(чтобы выполнить свою зависимость отIMessageHandler) - перейдите
DoSomethingMessageHandlerвLoggingMessageHandler(чтобы выполнить свою зависимость отIMessageHandler) - передать
LoggingMessageHandlerвFinalHandler(чтобы выполнить свою зависимость отIMessageHandler)
Возможно ли это (я читал о неявной поддержке IEnumerable)? Или мне придется использовать дополнительный класс между ними (a factory или что-то еще)?