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


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

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

1 2

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 и т. д.