我在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 *继承自IModuleSettings
,IModuleSettings
位于Infrastructure project
内。
注2:我将模块动态加载到prism中(我的主WPf
项目没有引用AModule
);
答案 0 :(得分:1)
您应该将ModuleSettings放入由各种模块/项目引用的类库项目中。您可以使用单例模式仅加载和维护一个设置实例。
答案 1 :(得分:0)
阅读GlenThomas answer&amp; @ BenediktSchroeder首先发表评论并阅读其他一些参考文献,如this&amp; this,我可以找到&amp;为我的问题实现一个好方法:
我通过添加新的自定义
解决了这个问题Prism Service
ISettingManager
中为我们的服务类(eq。Infrastructure Project
)创建一个接口。模块和主应用程序需要参考Infrastructure Project
SettingManager
)在ISettingManager
中定义一个属性以保持ModuleSetting
像:
Dictionary<string,ModuleSettingsModel> ModuleSettingsPairs{get;set;}
将ISettingManager
中的一些方法添加到Get
,Add
和Remove
设置到/ ModuleSettingsPairs
词典。
在ConfigureContainer
内的bootstraper
注册新的服务类型,如Singlton
,如:
RegisterTypeIfMissing(typeof(IAddonSettingsManager), typeof(AddonSettingsManager), true);
获取IAddonSettingsManager
或module project
中main app project
服务实例的引用,可以通过以下方式之一进行:
Resolve
的{{1}}方法)Unity container
,Get
和Add
方法(Remove
)