我有一个界面
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连接,所以当添加更多处理程序时,它将“正常工作”。 你能帮我解决一下我需要的代码变化,以及安装程序的外观吗?
答案 0 :(得分:1)
听起来你正在尝试做一个事件发布者/聚合器。
网上有几个这样的实现,这是一个技巧:
Castle有一个强大的机制,它将根据约定注册类型Docs here。上面的文章利用这个,自动连接任何实现所需接口的类型。
另外,附注: 如果要注入实现合同(接口)的所有类,则必须使用城堡windsor Example of registering a sub resolver注册行为,并且可以找到更多信息enter link description here
希望这有帮助