PRISM 模块化依赖

PRISM Modular dependencies

我有一个关于模块对其他模块的依赖性的问题。我研究了不同模块如何相互通信,但我不确定该使用什么,我非常需要澄清我将如何正确使用它们。

这就是我认为的棱镜之美。

在加载模块的位置方面,您有很大的灵活性。

过去,我使用 IModuleManager 可以将其注入任何模块的 ViewModel 并从那里调用加载方法。

加载方法接受您注册的模块的字符串名称。 注册时,我还将加载类型设置为 onDemand,因此仅当我专门调用加载方法时才加载模块。

所以在您的场景中,您可以在需要时在模块 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 和模块目录的功能,我可以使用模块 ModuleState 属性

检查模块是否已加载