我对模块对其他模块的依赖性有疑问。我已经研究过有关不同模块之间如何通信的信息,但是我不确定该使用什么模块,我非常需要澄清如何正确使用它们。
Module A
需要导航到Module B
的其中一个视图。我需要导航到Module A
之后再加载Module B
吗?如何设置每个模块的依赖关系?我应该在ModuleCatalog
内将它们配置为moduleCatalog.AddModule<ModuleB>("ModuleB", InitializationMode.OnDemand, "ModuleA");
还是在[ModuleDependency(ModuleA)]
类顶部进行Module B
Module A
需要导航到Module B
中的页面之一,我必须将导航参数传递到Module B
中。我应该使用shared service
还是event aggregator
吗?尽管我想尽量减少使用event aggregator
答案 0 :(得分:0)
我认为这是棱镜的美。
在模块的加载位置,您具有很大的灵活性。
过去,我使用过IModuleManager,可以将其插入任何模块的ViewModel中,然后从那里调用Load方法。
load方法采用已注册模块的字符串名称。 注册时,我还将加载类型设置为onDemand,因此仅在我专门调用load方法时才加载模块。
因此,在您的情况下,您可以随时在模块A中加载模块B。 它可能是由您的应用程序的某些业务逻辑触发的。
要回答第二个问题,您只需使用导航服务的导航参数功能传递参数即可
var param = new NavigationParameters();
param.Add("trip", someObject);
await NavigationService.NavigateAsync("TripDetailsPage", param);
编辑:
因此,如果您想知道是否已加载模块,可以执行以下操作:
public class ModuleService : IModuleService
{
private readonly IModuleCatalog _moduleCatalog;
private readonly IModuleManager _moduleManager;
public ModuleService(IModuleCatalog moduleCatalog, IModuleManager moduleManager)
{
_moduleCatalog = moduleCatalog;
_moduleManager = moduleManager;
}
public bool Exists(string moduleName)
{
return _moduleCatalog.Modules.Any(x => x.ModuleName == moduleName);
}
public bool Initialized(string moduleName)
{
return _moduleCatalog.Modules.Any(x => x.ModuleName == moduleName && x.State == ModuleState.Initialized);
}
public void LoadModule(string moduleName)
{
_moduleManager.LoadModule(moduleName);
}
}
因此,通过结合使用ModuleManager和Module Catalog的功能,我可以使用模块的ModuleState属性来检查模块是否已经加载