2010-10-05 35 views
2

遵循此解釋最簡單的方法是NServiceBus Pub/Sub示例,其中包含「多態訂閱」(Subscriber2)的示例。NServiceBus中的多態訂閱僅適用於接口?

消息:(不改變)

public class EventMessage : IEvent 
{ 
    public Guid EventId { get; set; } 
    public DateTime? Time { get; set; } 
    public TimeSpan Duration { get; set; } 
} 

public interface IEvent : IMessage 
{ 
    Guid EventId { get; set; } 
    DateTime? Time { get; set; } 
    TimeSpan Duration { get; set; } 
} 

處理程序:(不改變)

public class EventMessageHandler : IHandleMessages<IEvent> 
{ 
    public void Handle(IEvent message) 
    { 
     // ... 
    } 
} 

此處理程序將收到兩個IEventEventMessage消息。但是,如果我會讓IEvent一類...

public class IEvent : IMessage 
{ 
    Guid EventId { get; set; } 
    DateTime? Time { get; set; } 
    TimeSpan Duration { get; set; } 
} 

...然後我將無法接收EventMessage但會收到IEvent像以前

所以,我發現了這樣簡單的規則:如果你在IHandleMessages中使用接口> - 它會工作,如果類 - 它不會工作。目前我有所有的消息作爲類,我想訂閱父類的消息,以接收所有的孩子類消息。

它是否打算行爲?

回答

3

這是所有設計爲了啓用多重繼承。這樣做的原因詳述如下:here。業務組件之間的公共可用事件建議建模爲接口,業務組件中的命令建議建模爲類。聽起來你想要這種行爲,我會切換到接口。