c# – 具有同一接口的多个实现的Autofac

前端之家收集整理的这篇文章主要介绍了c# – 具有同一接口的多个实现的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的依赖)
>将DoSomethingMessageHandler传递给LoggingMessageHandler(以实现其对IMessageHandler的依赖)
>将LoggingMessageHandler传递给FinalHandler(以履行对IMessageHandler的依赖)

甚至有可能(我已经读过implicit support for IEnumerable)吗?或者我必须在两者之间使用一个额外的课程(一个工厂或某事)?

解决方法

Autofac拥有 Decorators支持.

猜你在找的C#相关文章