2012-12-05 41 views
0

我們有兩種消息類型UpdateIndividualUpdateIndividualWithDetailsUpdateIndividualWithDetails繼承自UpdateIndividual。然後,我們爲每個處理器我們正在與在NServiceBus中使用多態消息時,有沒有辦法控制消息處理程序的順序?

public void SpecifyOrder(Order order) 
{ 
    order.Specify(new First<UpdateIndividual>()); 
} 

這不起作用指定的順序,爲UpdateIndividualWithDetails總是最先被調用。我們使用NServiceBus 2.6,現在無法升級。有沒有辦法解決這個問題?

+0

在消息處理程序中定位最低級別的類型可能是最簡單的。 –

+0

你可以刪除繼承嗎?這就是NServiceBus關於預期訂單的含義。 –

+1

@UdiDahan我們需要兩個消息來運行基本類型的處理程序,然後我們需要對繼承類型進行額外的處理。我認爲這是多態處理程序的重點,所以你可以擴展功能? –

回答

0

從包含在問題中的代碼看來,您似乎意外指定了消息類型而不是處理程序類型。

如果您有單獨的處理程序類型,例如UpdateIndividualHandlerUpdateIndividualWithDetailsHandler,對於消息的每個形式,我會感到驚訝,如果這不工作:

public void SpecifyOrder(Order order) 
{ 
    order.Specify(new First<UpdateIndividualHandler>()); 
} 

alhtough它已經有一段時間,因爲我看着NServiceBus,所以我可能是不對的。

+0

沒有這是處理程序的名稱,我很清楚 –

+0

所以'UpdateIndividual'的處理程序也被稱爲'UpdateIndividual'?您必須在該代碼文件的頂部有一些有趣的使用語句;)您確定您沒有將意外的消息類型指定爲類型參數嗎? – mookid8000

+0

:)不,絕對的處理程序,消息命名空間不存在 –

0

使用組合而不是繼承解決了我們的問題。

相關問題