2010-03-25 30 views
5

這可能是有點在那裏,但假設我想用最小起訂量在視圖模型創建一些設計時的數據,就像這樣:使用起訂量在混合設計時

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

的模擬可以建立做一些事情,但你明白了。

我的問題是在共混物的設計時,這個代碼引發InvalidCastException,與沿行消息「無法轉換類型‘Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc’的目的爲類型‘ISomeDependency’」。雖然這不一定看起來像Moq相關,但與城堡相關,我希望Moq示例有所幫助;)

任何想法爲什麼這是?

謝謝!

回答

1

我有一個類似的問題,除了演員來自動態生成的程序集(Blend_RuntimeGeneratedTypesAssembly)類型,它是僞裝成我的類型之一。

沒有明顯的原因。

這是讓我瘋狂的原因。

+1

由類型程序集A導致以目標客戶端工廠的完整框架和設計時數據項目B爲目標。引起各種奇怪的事情發生。 – Will 2010-05-27 13:18:43

1

我曾經認爲我需要做這種技巧,但經過大量的實驗和研究後,發現Blend 4現在可以基於現有的類創建設計時示例datacontexts。

這有效地爲您提供了一個虛擬的類,它看起來就像你的虛擬機類,以便您可以添加您結合等

它工作得很好,這是我們現在建議的技術。

這樣做的一個可能的缺點是,如果您需要真正的虛擬機執行某種交互操作,那麼代理當然不能這麼做 - 您必須手動更改值或交換到另一個設計時間對象。但在實踐中,我很少遇到這種情況。大多數情況下,你設置虛擬機的狀態,然後讓年齡看起來正確。