使用ImportMany属性时,如何要求至少导入一个零件?

时间:2011-09-22 20:51:25

标签: .net mef

默认情况下,ImportAttribute要求只有一个部分符合属性中指定的合同。可以使用ImportAttribute.AllowDefault属性修改此行为。基本上,这会改变行为,允许零或一个部分满足合同。如果没有部件,则使用该导入的默认值。

ImportManyAttribute允许零个或多个部分来满足合同。 MEF将使用空集合或单件集合或一组部件来满足此导入,具体取决于它找到的内容。

如何告诉MEF空集合无效?

我应该:

  1. 如果集合为空,则实施IPartImportsSatisfiedNotification并从OnImportsSatisfied抛出异常?
  2. 实施我自己的ImportOneOrMoreAttribute
  3. 使用MEF的一些内置功能,我不知何故?

1 个答案:

答案 0 :(得分:4)

MEF默认只能理解三个基数:ZeroOrOne,ExactlyOne或ZeroOrMore。见ImportCardinality。所以你不能在MEF属性的约束下自己表达它。我不建议在OnImportsSatisfied中抛出异常,因为您可能会遇到其他不可预测的问题。

我担心你能做的最好的事情是ImportMany,并在你使用这些导入的时候进行验证。