Можно также хотеть посмотреть V8 от Google. Это является довольно новым, все же.
По умолчанию 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 .
Вы можете заставить правила импортировать друг друга по порядку (с использованием шаблона Decorator), но тогда каждое правило должно будет знать о конкретном правиле, которое ему предшествует, что, вероятно, не то, что вы хотите.
MEF поможет вам раскрыть детали, а что вы будете делать с ними после этого, зависит от вас. Если вы хотите отсортировать детали, то вперед, в этом нет ничего плохого!
Лучший способ добиться такого упорядочения в MEF - использовать наши средства метаданных. Вы можете прикреплять свои собственные метаданные к экспорту, которые можно использовать для упорядочивания и фильтрации. Метаданные также позволяют отложить создание экземпляров частей до тех пор, пока они действительно не понадобятся. Кроме того, вы можете создавать собственные атрибуты экспорта, которые обеспечивают удобный и понятный способ предоставления метаданных.
Проверьте эту ссылку для получения информации о том, как определять метаданные и пользовательский экспорт: текст ссылки
Вы также можете найти эта ветка на нашем форуме MEF полезна. Внутри вы найдете обсуждение подхода AdaptingCollection, который позволяет вам использовать настраиваемую коллекцию, которая применяет фильтр / порядок метаданных.
HTH Гленн