2010-03-25 17 views
5

Esto podría ser un poco por ahí, pero supongamos que quiero usar Moq en un modelo de vista para crear algunos datos en tiempo de diseño, así:Usando Moq en tiempo de diseño de mezcla

public class SomeViewModel 
{ 
    public SomeViewModel(ISomeDependency dependency) 
    { 
     if (IsInDesignMode) 
     { 
     var mock = new Mock<ISomeDependency>(); 
     dependency = mock.Object; // this throws! 
     } 
    } 
} 

La maqueta podría crearse para hacer algunas cosas, pero entiendes la idea.

Mi problema es que en tiempo de diseño de mezcla, este código produce una InvalidCastException, con el mensaje en la línea de "No se puede convertir objeto de tipo 'Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc' al tipo 'ISomeDependency'." Si bien esto no necesariamente parece estar relacionado con Moq, pero está relacionado con Castle, espero que el ejemplo de Moq ayude;)

¿Alguna idea de por qué es así?

Gracias!

Respuesta

1

Tengo un problema similar, excepto que el elenco proviene de un ensamblaje generado dinámicamente (Blend_RuntimeGeneratedTypesAssembly) tipo que se hace pasar por uno de mis tipos.

Sin motivo aparente.

Lo que me está volviendo loco.

+1

Causado por el tipo de ensamblado A dirigido al marco completo y al proyecto de datos de tiempo de diseño B dirigido a la fábrica del cliente. Causó todo tipo de cosas extrañas para suceder. – Will

1

Solía ​​pensar que tenía que hacer este tipo de truco pero después de mucho experimentar y buscar descubrí que Blend 4 ahora puede crear contextos de datos de muestra de tiempo de diseño basados ​​en una clase existente.

Esto efectivamente le da una clase ficticio que se parece a la clase de máquina virtual para que pueda añadir su unión etc.

Funciona muy bien que esta es la técnica ahora recomendamos.

Una posible desventaja de esto es que si necesita su máquina virtual real para realizar algún tipo de interactividad, entonces el proxy por supuesto no puede hacer eso - tendría que cambiar valores manualmente o cambiar a otro objeto de tiempo de diseño . Pero en la práctica, rara vez me he encontrado con este escenario. La mayoría de las veces, establece el estado de la VM y luego toma años para obtener el aspecto correcto.

1

actualización: lanzado en github: https://github.com/GeniusCode/GeniusCode.Components.DynamicDuck

También se encontró con un problema similar cuando se trata de utilizar castillo para ViewModels simulados en tiempo de diseño. Escribimos nuestra propia biblioteca de msil duck/mock, y funciona bien para ese propósito.

blogged sobre él aquí: http://blogs.geniuscode.net/JeremiahRedekop/?p=255

Estamos trabajando para liberar la biblioteca bajo MS-PL y desplegar en GitHub.

Cuestiones relacionadas