2010-03-25 40 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。

这有效地为您提供了一个虚拟的类,它看起来就像你的虚拟机类,以便您可以添加您结合等

它工作得很好,这是我们现在建议的技术。

这样做的一个可能的缺点是,如果您需要真正的虚拟机执行某种交互操作,那么代理当然不能这么做 - 您必须手动更改值或交换到另一个设计时间对象。但在实践中,我很少遇到这种情况。大多数情况下,你设置虚拟机的状态,然后让年龄看起来正确。