Я использую 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 или что-то еще)?