Я только начал работать с MEF в Silverlight месяц назад, поэтому я определенно не являюсь авторитетом.
Первое, что я заметил, это то, что CompositionHost.SatisfyImports был заменен на CompositionInitializer.SatisfyImports .Во-вторых, я не смог найти ссылку на «SatisfyImports может быть вызван только один раз»
Мой сценарий следующий:
- У меня есть BL xap, на который я использую / ссылаюсь из своего приложения
- У BL есть некоторые импорты, которые будут удовлетворены вызовом SatisfyImports из приложения
- У BL также есть некоторые импортные операции, которые не могут / не будут разрешены, пока определенный пользовательский (сторонний) модуль / xap не будетбыть загружен (загружен, когда спрос, который есть).Когда пользовательский модуль становится доступным (загружен), я решаю пропущенный импорт с помощью дополнительного вызова CompositionInitializer.SatisfyImports:
Например:
If DomainSpecificModuleLogic Is Nothing Then
'this is required to trigger recomposition and resolve imports to the ThirdPartyModule
System.ComponentModel.Composition.CompositionInitializer.SatisfyImports(Me)
End If
Так что у меня несколько вызововSatisfyImports (в разные моменты времени) и никаких проблем из-за этого -> вам не требуется контроль над всем приложением, просто убедитесь, что когда кто-то обращается к объекту из вашей библиотеки, использующей MEF, у вас есть вызов SatisfyImports
Примечание: мой BL - одноэлементный, поэтому я, разумеется, вызываю SatisfyImports для одного и того же объекта несколько раз.