0

我有一个界面

  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 连接起来,所以当添加更多处理程序时,它会“正常工作”。您能帮我弄清楚我需要对我的代码进行哪些更改,以及安装程序的外观吗?

4

1 回答 1

1

听起来您正在尝试做一个事件发布者/聚合器。

网上有几个实现,这里有一篇文章:

事件发布者

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

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

另外,附带说明:如果要注入所有实现合同(接口)的类,则必须向城堡温莎注册行为,可以找到注册子解析器的示例和更多信息,请在此处输入链接描述

希望这可以帮助

于 2013-07-22T02:02:52.053 回答