2010-03-25 16 views
5

Questo potrebbe essere un po 'là fuori, ma supponiamo che voglio usare Moq in un ViewModel per creare alcuni dati fase di progettazione, in questo modo:Utilizzando Moq in fase di progettazione Miscela

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

Il mock potrebbe essere istituito per fare qualcosa, ma tu hai l'idea.

mio problema è che in fase di progettazione in Blend, questo codice genera InvalidCastException, con il messaggio sulla falsariga di "Impossibile eseguire il cast oggetto di tipo 'Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc' digitare 'ISomeDependency'." Sebbene questo non sia necessariamente correlato al Moq ma relativo al Castello, spero che l'esempio di Moq aiuti;)

Qualche idea sul perché?

Grazie!

risposta

1

Sto riscontrando un problema simile, tranne che il cast proviene da un assembly generato dinamicamente (Blend_RuntimeGeneratedTypesAssembly) di tipo mascherato da uno dei miei tipi.

Per nessuna ragione apparente.

Che mi sta guidando PAZZO.

+1

Causato dall'assemblaggio del tipo Un targeting per il progetto completo B e il progetto di dati temporali di progettazione destinati alla fabbrica del cliente. Ha causato ogni sorta di strana merda per accadere. – Will

1

Ero abituato a pensare che avevo bisogno di fare questo tipo di trucco, ma dopo molte ricerche e ricerche, ho scoperto che Blend 4 ora può creare dataconx di esempi di tempo di progettazione basati su una classe esistente.

questo ti dà effettivamente una classe fittizia che sembra proprio come la classe VM in modo da poter aggiungere il legame ecc

Funziona abbastanza bene che questa è la tecnica che ora consiglia.

Un possibile svantaggio di questo è che se è necessario che la tua VM virtuale esegua una sorta di interattività, il proxy ovviamente non può farlo: devi modificare manualmente i valori o passare a un altro oggetto di progettazione. . Ma in pratica, ho incontrato raramente questo scenario. La maggior parte delle volte, si imposta lo stato della VM e poi si impiegano anni per ottenere il look giusto.

1

Aggiornamento: rilasciato su github: https://github.com/GeniusCode/GeniusCode.Components.DynamicDuck

Ho anche imbattuto in un problema simile quando si cerca di utilizzare il castello per ViewModels finte in fase di progettazione. Abbiamo scritto la nostra libreria msil duck/mock e funziona bene per questo scopo.

ho bloggato su di esso qui: http://blogs.geniuscode.net/JeremiahRedekop/?p=255

Stiamo lavorando per rilasciare la libreria sotto MS-PL e distribuire su GitHub.

Problemi correlati