2015-07-28 1 views
2

у меня есть решения в VS и хочу сохранить некоторые настройки моего prismmodule внутри объекта в проекте модуля (я загрузить эти настройки из файла) , то я создал свой prismmodule класс (AModule.cs), как это:WPF Prism доступ к определенной информации, как некоторые объекты класса внутри модуля от основного проекта

Внутри моего проекта модуля (AModul проекта):

[Export] 
[Module(ModuleName = "AModule")] 
public class AModule : IModule 
{ 
    ModuleSettingsModel ModuleSettings { get ; set; } 

    public AModule() 
    { 
     // throw new NotImplementedException(); 
    } 

    public AModule(IUnityContainer container) 
    { 
     // Some codes .... 
    } 

    ~AModule() 
    { 
     // some codes 
    } 

    public void Initialize() 
    { 
     var regionManager = _container.Resolve<IRegionManager>(); 
     regionManager.RegisterViewWithRegion("WorkspaceRegion", typeof(ModuleAView)); 


     ModuleSettings = DataFileManager.LoadModuleData(); 
    } 

Это хорошо работает, и я могу использовать свои настройки в AModule


Внутри Main WPF Project:

Но мне нужно получить доступ к этой настройке (ModuleSettings собственности) в моем Main WPF project также. Например, мне нужен доступ к ModuleA »ModuleSettings в моем классе Bootstrapper моего приложения WPF. Мне нужно сделать некоторую рабочую базу по каждому модулю в моем основном проекте ...

Мой вопрос в том, какие решения нужно делать? Должен ли я регистрировать какой-либо тип? Где? Как?


Note1: ModuleSettings * наследуется от IModuleSettings и IModuleSettings внутри Infrastructure project.

Примечание2: я загружаю свои модули динамически в призме (мой основной WPf проект не имеет каких-либо ссылок на AModule);

+1

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

+0

@BenedikSchroeder, спасибо, мне нужно 2 простых примера о вашем решении 2. Мне нужно знать, как это сделать, как и где регистрировать новые типы. Можете ли вы написать ответ, включайте полезную информацию об этом решении. Также reffrense ссылки на некоторые внешние образцы и статьи могут помочь мне ... – RAM

ответ

1

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

+0

Нет, я не буду повторять .... Мне нужен полный доступ динамически к некоторому созданному объекту в моих модулях. Я думаю, что у Призмы есть определенные возможности для этого. – RAM

+0

спасибо, я имею в виду не новую библиотеку классов и другую ссылку, но ваш путь верен, но ваш ответ не помог мне в вопросе «Где» и «Как» это было в моем вопросе. – RAM

0

После чтения GlenThomas answer & @ первый комментарий BenediktSchroeder в вопросе и читать некоторые дополнительные ссылки, как this & this, я мог бы нашел & реализовать хороший способ для моего вопроса:

Я решил, добавив новый пользовательский Prism Service

  1. Создание интерфейса для нашего сервисного класса (экв. ISettingManager) в Infrastructure Project. Модули и основное приложение нуждаются в ссылках на Infrastructure Project
  2. Создайте класс для нашего обслуживания (экв.SettingManager)
  3. Определить одно свойство в ISettingManager держать ModuleSetting как:

    Dictionary<string,ModuleSettingsModel> ModuleSettingsPairs{get;set;}

  4. Добавьте некоторые методы в ISettingManager к Get, Add и Remove настройки в/из ModuleSettingsPairs словаря.

  5. Зарегистрируйте новый тип услуг в внутри bootstraper в Singlton как:

    RegisterTypeIfMissing(typeof(IAddonSettingsManager), typeof(AddonSettingsManager), true);

  6. Получить ссылку к экземпляру IAddonSettingsManager службы в module project или main app project, это можно сделать одним из следующих способов :

    • Декларативно получить ссылки на службы, использующие конструкцию или инъекции
    • Программные получить ссылки на услуги (по использовать Resolve метод Unity container)
  7. Наконец, играть с обычаем Get, Add и Remove методы нашего экземпляра службы (SettingManager)
+0

Это то, что я считаю и, на мой взгляд, чистым решением. –

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