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' にキャストできません」というメッセージが表示されることです。これは必ずしも Moq に関連しているようには見えませんが、Castle に関連しているようには見えませんが、Moq の例が役立つことを願っています ;)

それはなぜですか?

ありがとう!

4

3 に答える 3

1

以前はこの種のトリックを行う必要があると思っていましたが、多くの実験と検索を行った結果、Blend4で既存のクラスに基づいてデザインタイムのサンプルデータコンテキストを作成できることがわかりました。

これにより、VMクラスと同じように見えるダミークラスが効果的に提供されるため、バインディングなどを追加できます。

これが現在推奨されている手法であるため、十分に機能します。

これで発生する可能性のある欠点は、実際のVMで何らかの対話機能を実行する必要がある場合、プロキシはもちろんそれを実行できないことです。手動で値を変更するか、別のデザインタイムオブジェクトに交換する必要があります。しかし実際には、このシナリオに遭遇することはめったにありません。ほとんどの場合、VMの状態を設定してから、見栄えを良くするために何年もかかります。

于 2010-12-02T15:05:38.723 に答える
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_RuntimeGeneratedTypesAssembly) 型から来ており、それが私の型の 1 つになりすましていることを除きます。

明らかな理由はありません。

それが私を夢中にさせています。

于 2010-05-26T16:30:18.800 に答える