2010-05-18 97 views
7

我想模擬一個ServiceContract。問題是Moq(和Castle Dynamic-Proxy)將界面中的屬性複製到Wcf不喜歡的動態代理中。 Wcf說:ServiceContractAttribute只能在接口或實現上定義,而不能同時定義。嘲笑Wcf ServiceContract

異常是:InvalidOperationException - 類型爲Castle.Proxies.IWorkOrderRequestServiceProxy的服務類都定義了一個ServiceContract並從IWorkOrderRequestService類型繼承了一個ServiceContract。合約繼承只能在接口類型中使用。如果一個類標記了ServiceContractAttribute,它必須是具有ServiceContractAttribute的層次結構中唯一的類型。考慮將類型爲IWorkOrderRequestService的ServiceContractAttribute移動到類型爲IWorkOrderRequestService的獨立接口

回答

21

剛剛遇到同樣的問題 - 所以解決方案的+1! :-)

更新:http://code.google.com/p/moq/source/browse/trunk/Source/Proxy/CastleProxyFactory.cs包含一個名爲AttributesToAvoidReplicating的屬性(集合)的引用,看起來像一個地方開始尋找Moq源代碼。

更新#2:釘上它!

添加:

Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof運算(ServiceContractAttribute的));

在你連接內核中的任何東西之前。