gpt4 book ai didi

c# - MEF 如何确定其导入顺序?

转载 作者:IT王子 更新时间:2023-10-29 04:37:44 24 4
gpt4 key购买 nike

MEF 允许您通过使用 ImportMany 属性导入多个部分。它如何确定检索相关导出并将它们添加到您正在填充的可枚举的顺序?例如,我将如何导入必须按特定顺序触发的多个 IRules?我能想到的唯一方法是在 IRule 中有一个 OrderValue 属性并手动排序:

public class Engine
{
[ImportMany]
public IEnumerable<IRule> Rules { get; set; }

public void Run()
{
// ...
// Initialise MEF
// ...

//
// Do I need to manually order Rules here?
//

foreach (IRule rule in Rules)
{
// Must execute in a specific order
rule.Execute();
}
}
}

最佳答案

默认情况下,MEF 不保证导入导出的任何顺序。但是,在 MEF 中,您可以使用一些元数据和自定义集合进行一些排序。例如,您可以执行以下操作:

public interface IRule { }

[Export(typeof(IRule))]
[ExportMetadata("Order", 1)]
public class Rule1 : IRule { }

[Export(typeof(IRule))]
[ExportMetadata("Order", 2)]
public class Rule2 : IRule { }

public interface IOrderMetadata
{
[DefaultValue(Int32.MaxValue)]
int Order { get; }
}

public class Engine
{
public Engine()
{
Rules = new OrderingCollection<IRule, IOrderMetadata>(
lazyRule => lazyRule.Metadata.Order);
}

[ImportMany]
public OrderingCollection<IRule, IOrderMetadata> Rules { get; set; }
}

然后您将拥有一组按元数据排序的规则。您可以在 http://codepaste.net/ktdgoh 找到 OrderingCollection 示例.

关于c# - MEF 如何确定其导入顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com