2010-05-18 94 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的));

在你连接内核中的任何东西之前。