我正在使用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的依赖)
甚至有可能(我已经读过implicit support for IEnumerable)吗?或者我必须在两者之间使用一个额外的课程(一个工厂或某事)?
解决方法
Autofac拥有
Decorators支持.