Как использовать импорт с MEF и загружать их только в том случае, если - PullRequest
1 голос
/ 06 января 2012

Как я могу использовать MEF для динамического разрешения моего импорта.Один пример:

class Class1
{
    [Export("P1", typeof(string)]
    string _p1;
}

class Class2
{
    [Import("P1", typeof(string), AllowRecomposition = true]
    string importedP1;
}

Class1 находится в одной сборке, а Class2 в другой.Собрания не знают друг друга.Проблема в том, что при вызове CompositionContainer.ComposeParts () сборка / экспорт Class1 регистрируется не в каком-либо каталоге, а при импорте Class2.В принципе, я даже не могу быть уверен, что сборка Class1 будет загружена.Но если он будет загружен, я бы хотел, чтобы импорт выполнялся автоматически / динамически.

Как мне этого добиться?Я думал, что «AllowRecomposition» как раз для этого случая, но я получаю исключение ChangeRejectedException, потому что произошла ошибка композиции с сообщением, что не найден правильный экспорт с ограничениями моего импорта.

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Вы должны установить AllowDefault=true в вашей декларации Import. Таким образом, вы не получите ошибку времени выполнения, если импорт не был выполнен, и вы все равно сможете ее удовлетворить, если сборка будет загружена позже.

[Import("P1", typeof(string), AllowDefault = true, AllowRecomposition = true]
0 голосов
/ 07 января 2012

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

Вы можете опубликовать свой код для составного контейнера и использования class1, class2, чтобы мы могли помочь вам немного лучше. Один из способов - установить атрибут [Export] для ваших классов.

...