У меня есть приложение, основанное на Prism (v4 ctp) и MEF. Приложение имеет сервис IService1. Я хочу, чтобы эта реализация сервиса была экспортирована некоторым модулем (не только обнаруженный MEF)Prism + MEF: отсроченный экспорт услуг из призматического модуля
public interface IService1 {}
public class Service1Impl: IService1 {}
Service1Impl не ExportAttribute. Это потому что я хочу, чтобы создать реализацию вручную в моей Призма-модуль:
[ModuleExport(typeof(SomeModule))]
[PartCreationPolicy(CreationPolicy.Shared)]
public SomeModule: IModule
{
[Export]
public IService1 Service1 {get; private set}
public void Initialize()
{
Service1 = new Service1Impl();
}
}
В некоторых других компонентов, которые я хочу получить реализацию IService1 через MEF Импорт. Проблема заключается в том, как сказать MEF делать экспорт (в SomeModule) после того, как Initialize был вызван Prism?
Если я создаю реализацию службы в конструкторе модуля, тогда все работает нормально, но это несовместимо с процессом инициализации модулей Prism. Дело в том, что Prism инициализирует модули после завершения композиции MEF. Кроме того, перед созданием реализации службы мне нужно выполнить некоторую сложную логику инициализации, и я не хочу, чтобы она была в конструкторе.
Итак, какие у меня варианты?
Спасибо, но если честно, мне не нравится этот подход, поскольку он создает зависимости между модулями, которые экспортируют услуги и модули, которые импортируют услуги. Нехорошо я верю. – Shrike
@Shrike У вас уже есть неявная зависимость. Вы ожидаете, что реализация службы будет предоставлена другим модулем, а часть вашего процесса завершится неудачно, если его там нет. Вот почему я разместил раздел «Как в стороне» ... у вас есть зависимость между вашими модулями, которые вам нужно адресовать. Мне тоже не нравится ModuleDependency, но вы должны каким-то образом обращаться к предполагаемой зависимости. Если не ModuleDependency, то один из других подходов, перечисленных мной. –