Передача метаданных с модулями Prism

Я пишу модульное приложение Prism, ведьма загружает файлы модулей из каталога (файлы dll). Как разработчик, я не знаю, сколько из этих модулей будет в этом каталоге, какого рода и т. д.

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

Я знаю, что могу добиться этого, создав что-то вроде файла Module.config в каждом модуле, а затем получить к нему доступ в основном приложении по пути ModuleInfo.Ref (на один уровень вверх -> затем получить путь к файлу Module.config) - но я не хочу делать это так.

Интересно, есть ли у Prism возможность передавать метаданные по коду (Интерфейс для режима метаданных? Строка XML? Динамический объект?). Если нет, то как я могу это реализовать и какие классы я должен переопределить?

Спасибо за любой совет!


person Zozo    schedule 29.01.2014    source источник
comment
Не уверены, поддерживает ли PRISM что-то подобное? Но разве вы не можете создать что-то вроде, скажем, MetadataStore (IMetadataStore) и зарегистрировать его в Container во время Bootstrap и внедрить этот IMetadataStore в каждый модуль, а затем каждый модуль регистрирует свои метаданные во время Initialize()?   -  person Suresh    schedule 29.01.2014


Ответы (1)


Если вы хотите предоставить метаданные из модуля основному приложению ПОСЛЕ того, как модуль был загружен и инициализирован, то простой способ сделать это — добавить метаданные модуля в его метод Initialize. Например, у вас может быть общая служба, отвечающая за хранение метаданных модулей, и каждый модуль может получить к ней доступ и добавить свои метаданные при их инициализации.

Если вы хотите получить доступ к метаданным модуля ДО того, как он будет загружен (например, чтобы решить, какие модули вы хотите загружать, а какие нет), то Prism не предоставляет никакой функциональности, которая могла бы помочь вам сделать это из коробки. Вы можете заменить реализацию по умолчанию нескольких классов, связанных с интерактивностью API Prism, чтобы добавить собственные функциональные возможности (подробнее об этом можно прочитать здесь,) но для этого случая, я думаю, было бы лучше реализовать отдельный сервис для получения метаданных для модулей, которые бы потом просто делегировали инициализация модулей в Prism.

person Damian Cherubini    schedule 07.02.2014
comment
На самом деле, я изменил реализацию каталога модулей и добавил атрибуты к модулям, поэтому каталог модулей считывает мои дополнительные атрибуты и создает структуры для метаданных. Спасибо за помощь! - person Zozo; 09.04.2014