我想模拟一个ServiceContract。问题是Moq(和Castle Dynamic-Proxy)将属性从接口复制到Wcf不喜欢的动态代理。 Wcf说:ServiceContractAttribute只应在接口或实现上定义,而不是两者都定义。
异常是:InvalidOperationException - Castle.Proxies.IWorkOrderRequestServiceProxy类型的服务类都定义了ServiceContract并从IWorkOrderRequestService类型继承了ServiceContract。合同继承只能在接口类型中使用。如果类使用ServiceContractAttribute标记,则它必须是具有ServiceContractAttribute的层次结构中的唯一类型。考虑将类型IWorkOrderRequestService上的ServiceContractAttribute移动到IWorkOrderRequestService实现的单独接口
答案 0 :(得分:22)
刚遇到同样的问题 - 所以+1解决方案! : - )
更新:http://code.google.com/p/moq/source/browse/trunk/Source/Proxy/CastleProxyFactory.cs包含对名为AttributesToAvoidReplicating的属性(集合)的引用,看起来像是一个开始查看Moq源代码的地方。
更新#2:钉住它!
添加:
Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof运算(ServiceContractAttribute的));
在连接内核中的任何内容之前。