实施“;复合图案“;温莎城堡

本文关键字:城堡 复合 实施 | 更新日期: 2023-09-27 18:23:58

我有一个接口

  public interface IMessageHandler
  {
     void ProcessMessage(CanonicalModelEntityMessage message); 
  }

我有一些具有这种模式的具体处理程序

public class ThingMessageHandler : IMessageHandler
{
    public void ProcessMessage(Message queueMessage){
      //HandleMessage
   }
}

我还有一个"复合"对象,它将

public class MessageHandler : IMessageHandler
{
    private List<IMessageHandler> _handlers;
    public MessageHandler()
    {
        _handlers =new List<IMessageHandler>();
    }
    public void Handle(CanonicalModelEntityMessage message)
    {
        foreach (var messageHandler in _handlers)
        {
            messageHandler.Handle(message);
        }
    }
    public void Add(IMessageHandler messageHandler)
    {
        _handlers.Add(messageHandler);
    }
}

每个处理程序都可以查看每条消息。

我相信有一种方法可以将其与Castle连接起来,所以当添加更多的处理程序时,它将"正常工作"。你能帮助我计算出我需要对代码进行哪些更改,以及安装程序会是什么样子吗?

实施“;复合图案“;温莎城堡

听起来像是在尝试创建一个事件发布器/聚合器。

网络上有几个这样的实现,这里有一个artile:

事件发布者

  • 文章底部的代码。该代码适用于2.5,并在注释中修复了3.1+

Castle有一个强大的机制,可以根据约定注册类型,这里是Docs。上面的文章利用这一点,自动连接任何实现所需接口的类型。

此外,还有一条旁注:如果你想注入所有实现合约(接口)的类,你必须向castle windsor注册行为,注册子解析器的示例和更多信息可以在这里找到输入链接描述

希望这能帮助