实施“;复合图案“;温莎城堡
本文关键字:城堡 复合 实施 | 更新日期: 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注册行为,注册子解析器的示例和更多信息可以在这里找到输入链接描述
希望这能帮助