Составной WPF: глобальные переменные? - PullRequest
0 голосов
/ 01 сентября 2009

В Composite WPF-приложении, каков наилучший способ хранения глобальных переменных, необходимых для нескольких модулей? Например, я работаю над приложением, в котором нескольким модулям нужно получить имя файла, чтобы они могли извлечь нужные ему данные из файла.

Есть ли лучшая практика для хранения подобной информации в приложении Composite WPF? Как я могу получить информацию для своих модулей, сохраняя при этом слабые связи? Спасибо за вашу помощь

Дэвид Вениман
Системы предвидения

Ответы [ 3 ]

1 голос
/ 01 сентября 2009

Создайте интерфейс, который несет ответственность за возвращение «выбранного имени файла». В отличие от большинства служб / зависимостей, он не будет выполнять большую обработку - он просто отвечает за возврат значения. Используйте внедрение зависимостей, чтобы внедрить этот сервис во всех местах, где он нужен.

На данный момент это имя файла может показаться действительно глобальным, но представьте, что вашему приложению пришлось перейти с SDI на MDI. Никогда не стоит иметь настоящие синглтоны в своих композитных приложениях.

1 голос
/ 01 сентября 2009

Напишите сервис, который инкапсулирует требуемую логику, и упакуйте этот сервис в модуль. Затем пусть другие модули используют этот сервис для выполнения своей работы. Обратите внимание, что служба может предоставить имя файла напрямую или вместо этого может выбрать показ операций, которые работают с базовым файлом, при этом потребители не знают об этом файле.

0 голосов
/ 01 сентября 2009

Спасибо за оба ответа, оба из которых выглядят очень хорошо. Во время утренней пробежки я придумал третий подход и думаю, что попробую этот:

Я загружаю все модули в моём приложении Composite WPF при запуске и активирую только те виды, которые будут показаны изначально. Итак, все мои модули, даже те, которые не показаны, будут доступны после завершения запуска.

Когда они инициализируются, каждый модуль, которому требуется путь к файлу, будет подписываться на составное событие FileOpened в агрегаторе событий Prism. Когда файл открывается из командной консоли, модель представления оболочки публикует составное событие FileOpened. Составное событие будет содержать путь к файлу в качестве полезной нагрузки.

Таким образом, когда событие FileOpened публикуется моделью представления Shell, соответствующий метод обратного вызова в каждом модуле будет вызываться агрегатором событий Prism, а filePath будет передаваться в модель представления каждого модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...