2009-09-09 3 views
3

Я использую Framework Managed Extensibility Framework для приложения WPF. Я определил интерфейсы для так называемых точек расширения, которые предоставляют новые функции для приложения.Слияние ресурсов Словари динамически во время выполнения (для плагинов)

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

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

Все примеры, которые показывают, как это сделать, используя состояние нотации URI пакета, которое является решением, когда сборки, которые вы ссылаетесь, известны во время компиляции. Как вы достигаете того же, когда вы не знакомы с сборкой во время компиляции?

ответ

4

Вам необходимо получить либо по коду, либо по соглашению - информацию о том, что словарь ресурсов будет объединен. Подробности могут быть именем ресурсного словаря или самим экземпляром ResourceDictionary.

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

В первом случае вам понадобится построить подходящий pack URI, используя имя сборки (которую вы можете получить из внутреннего номера, вызвав extension.GetType().Assembly). Затем создайте ResourceDictionary, у которого Source установлен в URI пакета. Наконец, объедините это на соответствующий уровень дерева ресурсов.

+0

Отличный ответ. +1 Еще один отличный ответ с учетом этого специфического набора ограничений находится в этом сообщении: http://stackoverflow.com/questions/842571/using-mef-to-import-a-wpf-datatemplate –

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