Ну, как правило, в MEF вы разрешаете MEF выполнять построение вашего объекта, что позволит ему автоматически правильно составлять объекты, и автоматически устанавливать свойства ILogger с тегами [Import].
При этом, это не всегда работает в каждом сценарии. Если вы не можете использовать MEF для создания ваших объектов, потому что они генерируются из отдельного источника, есть другие варианты.
Например, эта распространенная проблема возникает в WPF и Silverlight. Когда вы используете эти технологии, вы часто хотите, чтобы синтаксический анализатор XAML создавал ваши объекты, но в этом случае они никогда не будут собраны.
Silverlight 4 добавляет класс CompositionInitializer для обработки этой ситуации. Это позволяет вам просто добавить это в ваш конструктор:
public MyClass() // MyClass Constructor
{
CompositionInitializer.SatisfyImports(this);
}
И CompositionInitializer
будет использовать каталоги, определенные в статическом классе с именем CompositionHost
, для составления построенного объекта. Похоже, это может быть хорошей альтернативой в вашей ситуации ...
В настоящее время нет "официальной" настольной версии этого. Гленн Блок опубликовал более старый порт этого для настольного использования (названный PartInitializer, который был старым именем) на его SkyDrive, который работает довольно хорошо. Переносить текущую версию SL для использования в настольных приложениях довольно просто, хотя для этого потребуется ручное портирование.
При этом было сказано (в твиттере и в других местах), что использование CompositionInitializer for Desktop будет добавлено на сайт кодового комплекса MEF в ближайшее время ...