默认情况下,ImportAttribute
要求只有一个部分符合属性中指定的合同。可以使用ImportAttribute.AllowDefault
属性修改此行为。基本上,这会改变行为,允许零或一个部分满足合同。如果没有部件,则使用该导入的默认值。
ImportManyAttribute
允许零个或多个部分来满足合同。 MEF将使用空集合或单件集合或一组部件来满足此导入,具体取决于它找到的内容。
如何告诉MEF空集合无效?
我应该:
IPartImportsSatisfiedNotification
并从OnImportsSatisfied
抛出异常?ImportOneOrMoreAttribute
?答案 0 :(得分:4)
MEF默认只能理解三个基数:ZeroOrOne,ExactlyOne或ZeroOrMore。见ImportCardinality。所以你不能在MEF属性的约束下自己表达它。我不建议在OnImportsSatisfied中抛出异常,因为您可能会遇到其他不可预测的问题。
我担心你能做的最好的事情是ImportMany,并在你使用这些导入的时候进行验证。