WPF Prism访问定义的信息,例如来自主项目的Module中的一些类对象

时间:2015-07-28 03:05:58

标签: c# wpf prism-4

我在WPF Prism中有一个VS解决方案,并希望在模块项目中的对象中保留prism module的一些设置(我从文件中加载此设置) ),然后我创建了我的prism module类(AModule.cs),如下所示:

在我的模块项目(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。我需要根据主项目中的每个模块设置做一些工作......

  

我的问题是有什么解决方案可以做?我应该注册任何类型?哪里?怎么样?

注1: ModuleSettings *继承自IModuleSettingsIModuleSettings位于Infrastructure project内。

注2:我将模块动态加载到prism中(我的主WPf项目没有引用AModule);

2 个答案:

答案 0 :(得分:1)

您应该将ModuleSettings放入由各种模块/项目引用的类库项目中。您可以使用单例模式仅加载和维护一个设置实例。

答案 1 :(得分:0)

阅读GlenThomas answer&amp; @ BenediktSchroeder首先发表评论并阅读其他一些参考文献,如this&amp; this,我可以找到&amp;为我的问题实现一个好方法:

  

我通过添加新的自定义Prism Service

解决了这个问题
  1. ISettingManager中为我们的服务类(eq。Infrastructure Project)创建一个接口。模块和主应用程序需要参考Infrastructure Project
  2. 为我们的服务创建一个班级(例如SettingManager
  3. ISettingManager中定义一个属性以保持ModuleSetting像:

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

  4. ISettingManager中的一些方法添加到GetAddRemove设置到/ ModuleSettingsPairs词典。

    < / LI>
  5. ConfigureContainer内的bootstraper注册新的服务类型,如Singlton,如:

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

  6. 获取IAddonSettingsManagermodule projectmain app project服务实例的引用,可以通过以下方式之一进行:

    • 使用构造函数注入声明性地获取对服务的引用
    • 以编程方式获取对服务的引用(使用Resolve的{​​{1}}方法)
  7. 最后,使用我们服务实例的自定义Unity containerGetAdd方法(Remove