Импорт Mef в объекты, созданные после компоновки

#mef #composition

#mef #композиция

Вопрос:

Я создаю контейнер при запуске, а затем создаю экземпляр объекта, у которого есть свойство Import. Это свойство равно нулю, когда я пытаюсь его использовать.

Как MEF обрабатывает объекты, созданные позже. Я отказываюсь верить, что вам нужно создавать экземпляры всех объектов при запуске.

Комментарии:

1. ХОРОШО, я думаю, что, возможно, я неправильно понимаю, как настраивается MEF. Я думаю, что каталоги ищут только экспорт, и мне нужно создать пакет. Мне трудно понять, как построить систему снизу вверх. есть хорошие учебные пособия?

Ответ №1:

Вам не нужно создавать экземпляры сразу после создания контейнера, это никому не поможет. Как вы создаете свои экземпляры? Вот несколько примеров, учитывая примерный класс:

 [Export]
public class MyClass
{
    [Import]
    public MyOtherClass OtherClass { get; set; }
}
  

Я мог бы:

 var myClass = container.GetExportedValue<MyClass>(); // This would automatically compose.

var myExport = container.GetExport<MyClass>();
var myClass = myExport.Value; // This would automatically compose.

var myClass = new MyClass();
container.SatisfyImportsOnce(myClass); // Manually compose your part.
  

Или вручную скрутите все это вместе, используя CompositionBatch и т. Д.

Комментарии:

1. Итак, вы распространяете свой контейнер по всем классам, чтобы иметь доступ, когда вам нужно создать новый импорт?