Ошибка при выполнении GetComponentParts в MEF - PullRequest
3 голосов
/ 18 апреля 2011

При выполнении GetComponentParts я получаю следующую ошибку, а точнее, она воспроизводится при импорте в непрерывном цикле при обработке нескольких сообщений в моем приложении WCF

Композиция вызвала единственную ошибку композиции.Основная причина приведена ниже.Просмотрите свойство CompositionException.Errors для получения более подробной информации.

1) Композиция не выполнена, поскольку она не завершена в течение 100 итераций.Скорее всего, это вызвано циклом в графе зависимостей детали, который помечен политикой нераспространения создания.

Еще одна вещь, которую я не могу найти CompositionException.Errors чтобы найти основную причину.

Пожалуйста, предложите, какой обходной путь возможен, так как я не получаю ни одного потока в сети, предлагающего какой-либо способ ...

Большое спасибо

1 Ответ

2 голосов
/ 18 апреля 2011

Поскольку это работает большую часть времени, это, вероятно, проблема с многопоточностью, приводящая к повреждению внутреннего состояния MEF и вызывающая эту ошибку.

При использовании CompositionContainer из нескольких потоков необходимо создать его с помощьюПараметр isThreadSafe имеет значение true и избегает вызова методов, которые изменяют то, что доступно, таких как Compose, ComposeParts или AddExportedValue.

Методами, которые безопасно вызывать, являются методы GetExport и SatisfyImports.

...