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

.net 使用ImportMany属性时,如何要求至少导入一个零件?,.net,mef,.net,Mef,默认情况下,ImportAttribute要求只有一个零件满足属性中指定的契约。可以使用ImportAttribute.AllowDefault属性修改此行为。本质上,这改变了行为,允许零或一个部分满足合同。如果没有零件,则使用该导入的默认值 ImportManyAttribute允许零个或多个零件满足合同要求。MEF将使用一个空集合、一个单例集合或一组部件(取决于找到的内容)来满足此导入 如何告诉MEF空集合无效 我应该: 如果集合为空,是否实施ipartimportssatifiedNoti

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

ImportManyAttribute
允许零个或多个零件满足合同要求。MEF将使用一个空集合、一个单例集合或一组部件(取决于找到的内容)来满足此导入

如何告诉MEF空集合无效

我应该:

  • 如果集合为空,是否实施
    ipartimportssatifiedNotification
    并从
    onimportssatified
    引发异常
  • 实现我自己的
    导入或重新配置属性
  • 使用MEF的一些内置功能,但不知何故我缺少这些功能

  • 默认情况下,MEF只理解三个基数:ZeroOrOne、ExactlyOne或ZeroOrMore。看见因此,您不能在MEF属性的约束范围内自己表达它。我不建议在OnImportMessage中抛出异常,因为您可能会遇到其他不可预测的问题


    恐怕你能做的最好的事情就是导入许多内容,并在何时使用这些导入内容的背景下进行验证。

    这令人沮丧,希望他们将来添加一个或多个内容。