Ich benutze Autofac und möchte mehrere Implementierungen einer Schnittstelle haben. Wie kann ich Autofac so konfigurieren, dass Abhängigkeiten basierend auf dem aktuellen Typ aufgelöst werden?Autofac mit mehreren Implementierungen der gleichen Schnittstelle
Genauer gesagt, ich habe eine Schnittstelle und mehrere Implementierungen, die miteinander verkettet werden sollten.
Lassen Sie mich (fiktive Klassen) erklären:
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);
}
}
Am unteren Ende der Kette könnte ein IMessageHandler
sein, die nicht die Nachricht an die nächste hindurchgeht.
Wenn ich die folgende Kette:
TopLevelClass -> LoggingMessageHandler -> DoSomethingMessageHandler -> FinalHandler
Wie kann ich sagen Autofac zu
- Pass
LoggingMessageHandler
zuTopLevelClass
- Pass
DoSomethingMessageHandler
zuLoggingMessageHandler
(die Abhängigkeit vonIMessageHandler
zu erfüllen) (um seine Abhängigkeit vonIMessageHandler
zu erfüllen - Pass
LoggingMessageHandler
zuFinalHandler
(die Abhängigkeit vonIMessageHandler
zu erfüllen)
Ist es überhaupt möglich (ich habe über die implicit support for IEnumerable lesen)? Oder muss ich eine Extraklasse dazwischen verwenden (eine Fabrik oder etwas)?
Was Sie beschreiben, ist das [Decorator Pattern] (https://en.wikipedia.org/wiki/Decorator_pattern). Ihr 'LoggingMessageHandler' ist ein Dekorator. – Steven