2013-07-18 2 views
0

меня есть интерфейсРеализация «Composite шаблон» с замок Виндзор

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); 
    } 
} 

Каждый обработчик получает каждое сообщение.

Я считаю, что есть способ подключения этого к замку, поэтому, когда добавляется больше обработчиков, он «просто работает». Можете ли вы мне помочь в разработке каких изменений в моем коде, которые мне понадобятся, и на что будут выглядеть установщики?

+1

Hi Loofer Я постараюсь дать вам лучший ответ позже. Но, похоже, вы пытаетесь сделать то же самое, что и я, с агрегатором событий Caliburn Micro. Если вы посмотрите здесь код https://github.com/marwijn/Caliburn.Micro.Windsor/blob/master/content/Bootstrap/EventRegistrationFacility.cs.pp, вы можете найти свой ответ. – Marwijn

ответ

1

похоже, что вы пытаетесь создать издатель/агрегатор событий.

есть несколько реализаций этих в сети, вот artile:

Event publisher

  • код в нижней части этой статьи. Код для 2.5, с исправлением для 3.1+ в комментариях.

Замок имеет мощный механизм, который будет регистрировать типы по соглашению, Docs here. в приведенной выше статье используется это, для автоматической проводки любого типа, который реализует необходимый интерфейс.

Кроме того, примечание стороны: Если вы хотите, чтобы ввести все классы, реализующие контракт (интерфейс), вы должны зарегистрировать поведение с Виндзорским замком, Example of registering a sub resolver и более подробной информацией можно найти enter link description here

Надеется, что это помогает

Смежные вопросы