У меня есть приложение (просто тест), которое использует MEF и PRISM.
Довольно просто загрузить некоторые экспорты, которые соответствуют определенным интерфейсам
и передать их конструктору загружаемых модулей, но я пытаюсь сделать что-то другое.
Когда приложение запускается, оно импортирует реализацию IControllerClient.
Созданный экземпляр затем необходимо настроить (например, оболочкой), после чего
каждый модуль в приложении должен иметь к нему доступ.
Я не хочу иметь публичное свойство в Shell или какой-нибудь вспомогательный класс, который предоставляет
этот случай, как это, вероятно, будет считаться плохой практикой ... и мне не очень нравится.
Обновление: перефразируя вопрос ниже
У нас есть ряд интерфейсов, определенных в существующей структуре,
обычно они загружаются с использованием MEF в различные приложения.
Мне удалось загрузить их в модуль в приложении призмы, например, так:
[ImportingConstructorAttribute()]
public HelloWorldView(IDataTransportService dataTransportService,
IMessageFactory messageFactory,
IDataFactory dataFactory,
IDataProcessor dataProcessor,
IDataCollector dataCollector)
{
var client = new ControllerClient(dataTransportService,
messageFactory,
dataProcessor
dataCollector);
}
В этом случае модуль создает действительный экземпляр класса ControllerClient.
Но вместо того, чтобы передавать эти интерфейсы конструктору, я хочу иметь модуль
конструктор, как это:
[ImportingConstructorAttribute()]
public HelloWorldView(IClient client)
{
this.client = client;
}
Конструктор для реализации IClient (ControllerClient) имеет
[ImportingConstructorAttribute ()], поэтому я ожидал, что зависимости будут введены
автоматически в этот момент ... однако, используя этот код, конструктор даже не достигается.
Мне нужно иметь один экземпляр интерфейса IClient, который используется
ВСЕ модули в приложении. (Теперь я понимаю, что Shared является значением по умолчанию для импорта MEF).
Какой лучший способ сделать это? Почему я не могу иметь конструктор модуля, принимающий IClient,
а что если я захочу представить экземпляр класса таким образом, если он не знает о mef?
Итак, где в приложении mef / prism вы бы определили этот экземпляр, который может использоваться всеми модулями? И это то, что часто называют Услугой (но я мог только найти руководство по предоставлению услуг единству / призме).
Надеюсь, на этот раз я лучше объяснил свою проблему.
Обновление 2:
Поскольку для импорта MEF используется значение по умолчанию, я могу импортировать реализацию IClient в каждый модуль, но затем мне нужно выяснить, почему не вставляются зависимости