0

エクスポートされたテストハンドラーのセットを調整して、人間の介入なしで自動的に使用できるものと手動で使用できるものを検討しています。手動対応の場合、別のユーザー コントロールが表示されます。

コントラクト名を使用してエクスポート/インポートできることは知っていますが、これを次のように使用すると、どのような欠点があるのだろうかと思いました。

[Export(typeof(TestStepHandler))]
[Export("ManualTest", typeof(TestStepHandler))]

そうすれば、手動テストに関連付けられた 1 つの ViewModel のコントラクト名に対してインポートし、別の場所ですべてを別の ViewModel にインポートできます。ユーザーモードで表示されたときに「DataTemplate」が異なる動作をするようにするために、手動テストでプロパティが必要になると思いますが、これはインポートされたリストを反復処理するのに十分簡単です。

メタデータとLazyインポートとフィルタリングを使用できると考えましたが、コントラクト名の有無にかかわらず、エクスポートに比べてどのような利点がありますか?

4

1 に答える 1

2

エクスポート コントラクトに対するエクスポート メタデータの利点の 1 つは、メタデータを使用すると、エクスポートされたオブジェクトのフィルタリングを動的に変更できることです。属性を使用すると、その静的です。

あなたが説明することのもう1つの欠点は、テスト対象のコードにテスト関連のコードを追加することです。これがあなたが本当に望んでいるものかどうかはわかりません。

あなたが言及したエクスポートメタデータを使用したソリューションとは別に、属性付きモデルの契約を置き換える別の方法があります。

属性なしでエクスポート/インポートを設定できる MEF2の規則機能を使用します。MEF2 規則に慣れていない場合は、この一連のミニ記事をご覧ください。規約の優れた点は、属性モデルの代わりにならないことです。どちらも連携できます。つまり、アセンブリで MEF 属性を使用でき、テストでは規則を使用してコントラクトを追加できます。このアプローチで重要なことは、カタログの作成に使用されるRegistrationBuilderをテストで注入できるようにすることです。

于 2013-04-12T14:43:50.830 に答える