Как MEF определяет порядок своего импорта?

Можно также хотеть посмотреть V8 от Google. Это является довольно новым, все же.

20
задан Luke Bennett 20 November 2009 в 13:01
поделиться

3 ответа

По умолчанию 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; }
}

Тогда у вас будет набор правил, упорядоченных по метаданным. Вы можете найти образец OrderingCollection по адресу http://codepaste.net/ktdgoh .

31
ответ дан 30 November 2019 в 00:01
поделиться

Вы можете заставить правила импортировать друг друга по порядку (с использованием шаблона Decorator), но тогда каждое правило должно будет знать о конкретном правиле, которое ему предшествует, что, вероятно, не то, что вы хотите.

MEF поможет вам раскрыть детали, а что вы будете делать с ними после этого, зависит от вас. Если вы хотите отсортировать детали, то вперед, в этом нет ничего плохого!

1
ответ дан 30 November 2019 в 00:01
поделиться

Лучший способ добиться такого упорядочения в MEF - использовать наши средства метаданных. Вы можете прикреплять свои собственные метаданные к экспорту, которые можно использовать для упорядочивания и фильтрации. Метаданные также позволяют отложить создание экземпляров частей до тех пор, пока они действительно не понадобятся. Кроме того, вы можете создавать собственные атрибуты экспорта, которые обеспечивают удобный и понятный способ предоставления метаданных.

Проверьте эту ссылку для получения информации о том, как определять метаданные и пользовательский экспорт: текст ссылки

Вы также можете найти эта ветка на нашем форуме MEF полезна. Внутри вы найдете обсуждение подхода AdaptingCollection, который позволяет вам использовать настраиваемую коллекцию, которая применяет фильтр / порядок метаданных.

HTH Гленн

6
ответ дан 30 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: