加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:55:33 所属栏目:百科 来源:网络整理
导读:我正在使用Autofac,并希望有一个接口的多个实现.如何配置Autofac以便根据当前类型来解析依赖关系? 更具体来说,我有一个接口和多个实现应该链接在一起. 让我解释(虚构类): public interface IMessageHandler{ void Handle(Message message);}public class L
我正在使用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支持.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读