5

这可能有点过时,但假设我想在 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'”。虽然这看起来不一定与起订量相关,但与城堡相关,但我希望起订量示例有所帮助;)

知道为什么吗?

谢谢!

4

3 回答 3

1

我遇到了类似的问题,除了演员来自伪装成我的类型之一的动态生成的程序集 (Blend_RuntimeGeneratedTypesAssembly) 类型。

没有明显的原因。

这让我发疯。

于 2010-05-26T16:30:18.800 回答
1

更新:在github上发布: https ://github.com/GeniusCode/GeniusCode.Components.DynamicDuck

在设计时尝试使用城堡模拟视图模型时,我也遇到了类似的问题。我们编写了自己的 msil 鸭 / 模拟库,它为此目的工作得很好。

我在这里写了一篇博客:http: //blogs.geniuscode.net/JeremiahRedekop/ ?p=255

我们正在努力在 MS-PL 下发布该库并在 GitHub 上进行部署。

于 2011-08-04T00:30:51.303 回答
1

我曾经认为我需要做这种技巧,但经过大量的实验和搜索,发现 Blend 4 现在可以基于现有类创建设计时示例数据上下文。

这有效地为您提供了一个看起来就像您的 VM 类的虚拟类,以便您可以添加绑定等。

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

这样做的一个可能的缺点是,如果您需要真实的 VM 来执行某种交互,那么代理当然不能这样做 - 您必须手动更改值,或切换到另一个设计时对象。但在实践中,我很少遇到这种情况。大多数情况下,您设置 VM 的状态,然后花费很长时间来获得正确的外观。

于 2010-12-02T15:05:38.723 回答