Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF Prism从主项目访问模块内定义的信息,如某些类对象_C#_Wpf_Prism 4 - Fatal编程技术网

C# WPF Prism从主项目访问模块内定义的信息,如某些类对象

C# WPF Prism从主项目访问模块内定义的信息,如某些类对象,c#,wpf,prism-4,C#,Wpf,Prism 4,我在VS中有一个WPF Prism解决方案,希望在模块项目中的对象中保留我的Prism模块的一些设置(我从文件加载此设置),然后我创建了我的Prism模块(AModule.cs),如下所示: 在我的模块项目中(AModulproject): [Export] [Module(ModuleName = "AModule")] public class AModule : IModule { ModuleSettingsModel ModuleSettings { get ; set; }

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

在我的模块项目中(
AModul
project):

[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();
    }
[导出]
[模块(ModuleName=“AModule”)]
公共类模块:IModule
{
模块设置模型模块设置{get;set;}
公共模块()
{
//抛出新的NotImplementedException();
}
公用模块(IUnityContainer容器)
{
//一些代码。。。。
}
~AModule()
{
//一些代码
}
公共无效初始化()
{
var regionManager=_container.Resolve();
regionManager.RegisterViewWithRegion(“工作空间区域”,类型为(ModuleView));
ModuleSettings=DataFileManager.LoadModuleData();
}
它运行良好,我可以在
AModule中使用我的设置


内部
主要WPF项目

[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();
    }
但是我也需要在我的
主WPF项目中访问此设置(
ModuleSettings
属性)。例如,我需要在我的
WPF
应用程序的
Bootstrapper
类中访问
ModuleSettings
。我需要根据主项目中的每个模块设置做一些工作

我的问题是有什么解决方案?我应该注册任何类型吗?在哪里?如何注册


注1:模块设置*继承自
IModuleSettings
IModuleSettings
位于
基础设施项目中


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

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

在阅读了&@BenediktSchroeder的第一条有问题的评论,并阅读了一些其他引用,如&,i can found&i实现我的问题的一个好方法:

我通过添加一个新的定制
Prism服务

  • 基础设施项目
    中为我们的服务类(eq.
    ISettingManager
    )创建一个接口。模块和主应用程序需要参考
    基础设施项目
  • 为我们的服务创建一个类(eq.
    SettingManager
  • ISettingManager
    中定义一个属性以保持
    模块设置
    如下:

    字典模块设置SPAIRS{get;set;}

  • ISettingManager
    中的一些方法添加到
    Get
    Add
    Remove
    设置到
    ModuleSettingsPairs
    字典中

  • bootstraper
    内的
    ConfigureContainer
    中将新服务类型注册为
    Singlton
    如下:

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

  • 获取对
    模块项目
    主应用程序项目
    中的
    IAddonSettingsManager
    服务实例的引用,可以通过以下方式之一执行:

    • 使用构造函数注入以声明方式获取对服务的引用
    • 以编程方式获取对服务的引用(使用
      Unity容器的
      Resolve
      方法)
  • 最后,使用我们服务实例的自定义
    Get
    Add
    Remove
    方法(
    SettingManager

  • 在我的项目中,我使用自定义属性用有关必须在全局上下文中加载的资源的信息来装饰我的模型。您也可以使用您的设置来完成此操作。注册模块时只需检查这些设置。在全局上下文中保存设置的另一种方法是注册某种设置提供程序er在加载任何模块之前。在您的模块中,您可以解析该提供程序并注册您的设置。@BenedikSchroeder,谢谢,我需要两个关于您的2解决方案的简单示例。我需要知道如何使用这些方法,如何以及在何处注册新类型。请您写一个答案,包括一些关于这些解决方案的有用信息。另请参阅一些外部示例和文章的链接可以帮助我…不,我不会引用任何引用…我需要完全动态地访问模块中创建的对象。我认为Prism有一些工具可以做到这一点。谢谢,我的意思是不会有新类库和其他引用,但您的方法是正确的,但您的回答没有帮助我了解“在哪里”和“如何”这是我的问题。这就是我所理解的,在我看来是一个干净的解决方案。