#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. Итак, вы распространяете свой контейнер по всем классам, чтобы иметь доступ, когда вам нужно создать новый импорт?