我正在使用Autofac並希望有多個接口的實現。我如何配置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
依賴)於LoggingMessageHandler
- 通
DoSomethingMessageHandler
(以履行對其的依賴IMessageHandler
) - 通
LoggingMessageHandler
到FinalHandler
(履行其對IMessageHandler
依賴)
它甚至有可能(我看了一下implicit support for IEnumerable)?或者我需要在兩者之間使用額外的類(工廠或其他)?
你所描述的是[裝飾模式](https://en.wikipedia.org/wiki/Decorator_pattern)。你的'LoggingMessageHandler'是一個裝飾器。 – Steven