这可能有点像,但假设我想在ViewModel中使用Moq来创建一些设计时数据,如下所示:
public class SomeViewModel
{
public SomeViewModel(ISomeDependency dependency)
{
if (IsInDesignMode)
{
var mock = new Mock<ISomeDependency>();
dependency = mock.Object; // this throws!
}
}
}
模拟可以设置为做一些事情,但你明白了。
我的问题是,在Blend的设计时,此代码抛出一个InvalidCastException,消息沿着“无法将类型为'Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc'的对象强制转换为'ISomeDependency'。”虽然这不一定看起来与Moq相关但与Castle有关,但我希望Moq示例有帮助;)
知道为什么会这样吗?
谢谢!
答案 0 :(得分:1)
我有一个类似的问题,除了演员表来自动态生成的程序集(Blend_RuntimeGeneratedTypesAssembly)类型,伪装成我的类型之一。
没有明显的理由。
这让我疯狂。
答案 1 :(得分:1)
我曾经认为我需要做这种技巧但经过多次体验和搜索后,发现Blend 4现在可以根据现有的类创建设计时样本datacontexts。
这有效地为您提供了一个看起来就像您的VM类的虚拟类,以便您可以添加绑定等。
它运作良好,这是我们现在推荐的技术。
这可能的缺点是,如果您需要真正的VM来执行某种交互,那么代理当然不能这样做 - 您必须手动更改值,或交换到另一个设计时对象。但在实践中,我很少遇到这种情况。大多数情况下,您设置VM的状态,然后花费时间来看起来正确。
答案 2 :(得分:1)
更新:在github上发布:https://github.com/GeniusCode/GeniusCode.Components.DynamicDuck
在设计时尝试使用castle来模拟视图模型时,我也遇到了类似的问题。我们编写了自己的msil duck / mock库,它可以很好地用于此目的。
我在这里写了博客:http://blogs.geniuscode.net/JeremiahRedekop/?p=255
我们正在努力在MS-PL下发布库并在GitHub上部署。