0

我正在考虑尝试调整一组导出的测试处理程序,以便一些可以自动使用而无需人工交互,而另一些可以手动使用。当它们具有手动能力时,它们将显示不同的用户控件。

我知道您可以使用合同名称导出/导入,但我想知道这样使用有什么缺点:

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

这样我就可以在与手动测试相关的一个 ViewModel 中导入合同名称,并在其他地方导入另一个 ViewModel 中的所有内容。我想我仍然需要一个手动测试的属性,以便“DataTemplate”在用户模式下显示时以不同的方式工作,但这很容易迭代导入的列表。

我确实考虑过我可以使用元数据以及Lazy导入和过滤,但是与使用和不使用合约名称的导出相比,它有什么优势?

4

1 回答 1

2

导出元数据优于导出合同的一个优点是,您可以使用元数据动态更改导出对象的过滤。与属性其静态。

您所描述的另一个缺点是您在被测代码中添加了与测试相关的代码。我不知道这是不是你真正想要的。

Appart 使用您提到的导出元数据的解决方案,还有另一种替换属性模型合同的方法:

使用 MEF2 的约定功能,它允许设置没有属性的导出/导入。如果您不熟悉 MEF2 约定,请查看本系列迷你文章。约定的好处在于它不能替代属性模型。两者可以一起工作。这意味着您可以在程序集上使用 MEF 属性,并在测试中使用约定来添加合同。这种方法的重要之处在于允许测试注入将用于创建目录的RegistrationBuilder 。

于 2013-04-12T14:43:50.830 回答