MEF如何确定其进口顺序?MEF允许您使用ImportMany属性导入多个部分。它如何确定检索相关导出并将它们添加到您正在填充的可枚举的顺序?例如,如何导入必须按特定顺序触发的多个IRule?我能想到的唯一方法是使用IRule中的OrderValue属性并手动排序:publicclassEngine{[ImportMany]publicIEnumerableRules{get;放;}publicvoidRun(){//...//初始化MEF//...////我需要在这里手动排序规则吗?//foreach(IRuleruleinRules){//必须按特定顺序执行rule.Execute();}}}默认情况下,MEF不保证导入和导出的任何顺序。但在MEF中,您可以使用一些元数据和自定义集合进行一些排序。例如,您可以执行以下操作:publicinterfaceIRule{}[Export(typeof(IRule))][ExportMetadata("Order",1)]publicclassRule1:IRule{}[Export(typeof(IRule))][ExportMetadata("Order",2)]publicclassRule2:IRule{}publicinterfaceIOrderMetadata{[DefaultValue(Int32.MaxValue)]intOrder{get;}}publicclassEngine{publicEngine(){Rules=newOrderingCollection(lazyRule=>lazyRule.Metadata.Order);}[ImportMany]publicOrderingCollectionRules{get;放;然后,您将拥有一组按元数据排序的规则。您可以在http://codepaste.net/ktdgoh找到OrderingCollection示例。在MEF中实现这种排序的最佳方式是利用我们的元数据工具。您可以将自己的元数据附加到可用于排序和过滤的导出。元数据还允许您将部件的实例化推迟到实际需要它们时。此外,您可以创建自定义导出属性,这提供了一种提供元数据的简洁方式。有关如何定义元数据和自定义导出的信息,请查看此链接:链接文本您还可以在我们的MEF论坛上找到此主题。您将在其中找到对AdaptingCollection方法的讨论,该方法允许您使用应用元数据过滤器/顺序的自定义集合。HTHGlenn您可以让规则按顺序相互导入(使用装饰器模式),但是每个规则都需要知道它之前的特定规则,这可能不是您想要的。MEF帮助您发现部件,之后是否使用它们取决于您。如果您想对零件进行分类并继续前进,那没有错!以上是C#学习教程:MEF如何确定其导入顺序?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
