2009-09-01 2 views
0

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

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

Дэвид Veeneman
Foresight Systems

ответ

1

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

1

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

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

+0

Что касается синглтонов и MDI, вы можете иметь приложение с открытым файлом и MDI-интерфейсом. Решения Visual Studio - это один файл в среде MDI. –

0

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

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

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

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

Смежные вопросы