2013-12-23 25 views
3

MassTransit中的消費者接口都期望消息模型是類而不是結構。因爲都是內部接口(非常漂亮的設計,在那裏我必須說),這是一般的容器類顯示約束,直接from the source code採取:爲什麼在MassTransit消息傳遞中不允許使用結構體?

/// <summary> 
/// Declares a Consume method for the message type TMessage which is called 
/// whenever a a message is received of the specified type. 
/// </summary> 
public static class Consumes<TMessage> where TMessage : class 

這不是隨着技術的發展開始了人的問題,但對我們來說卻是一件麻煩事,因爲在考慮使用服務總線框架之前,我們已經在代碼庫中擁有與命令模式相關的對象,所以我們必須更改一堆接口和泛型類來添加該約束爲他們與MT合作。

雖然我們很幸運沒有任何struct類型,因爲這可能會導致更多(可能是不需要的)更改。

爲什麼它要求郵件類是class?是否有可能改變這種情況,以便庫更接近現有的代碼?我認爲這個約束並沒有增加,所以可能會有一些複雜性。

回答

1

實際上,所有的消息協定都應該是接口。抽象應該從任何邏輯中移除,並且接口將強制執行該抽象。你也可以用有趣的方式撰寫郵件,因爲郵件發送將傳遞給繼承/實現層次中的所有匹配路由。

但是不管我們對消息做了什麼建議,事實證明值類型不會像我們使用它們那樣工作。我們很大程度上依賴於類型信息,我們可以爲交付給消費者的類型創建代理。

相關問題