2010-05-18 17 views
7

Quiero burlarme de un ServiceContract. El problema es que Moq (y Castle Dynamic-Proxy) copia los atributos de la interfaz al proxy dinámico que no le gusta a Wcf. Wcf dice: ServiceContractAttribute solo debe definirse en la interfaz o la implementación, no en ambos.Burlarse de un Wcf ServiceContract

Excepción es: InvalidOperationException - La clase de servicio de tipo Castle.Proxies.IWorkOrderRequestServiceProxy tanto define un ServiceContract y hereda un ServiceContract de tipo IWorkOrderRequestService. La herencia de contrato solo se puede usar entre los tipos de interfaz. Si una clase está marcada con ServiceContractAttribute, debe ser el único tipo en la jerarquía con ServiceContractAttribute. Considere mover el ServiceContractAttribute en el tipo IWorkOrderRequestService a una interfaz separada que escriba IWorkOrderRequestService implements

Respuesta

21

Acabo de experimentar el mismo problema, ¡entonces +1 para una solución! :-)

Actualización: http://code.google.com/p/moq/source/browse/trunk/Source/Proxy/CastleProxyFactory.cs contiene una referencia a una propiedad (colección) llamada AttributesToAvoidReplicating, parece un lugar para comenzar a buscar en el código fuente de Moq.

Actualización n. ° 2: ¡Clavado!

Añadir:

Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add (typeof (ServiceContractAttribute));

antes de conectar cualquier cosa en su kernel.

Cuestiones relacionadas