ПРИЗМА Модульные зависимости - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть вопрос относительно зависимостей модуля от другого модуля.Я исследовал, как различные модули взаимодействуют друг с другом, но я не уверен, что использовать, и мне нужны некоторые пояснения, как я собираюсь использовать их правильно.

  • Как загружать модули в зависимости друг от друга?например, 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

1 Ответ

0 голосов
/ 13 февраля 2019

В этом вся прелесть Prism.

У вас есть большая гибкость, когда дело доходит до места загрузки модулей.

В прошлом я использовал IModuleManager , который я могу вставить в ViewModel любого модуля, и оттуда я могу вызвать метод загрузки.

Метод загрузки принимает строковое имя зарегистрированного вами модуля.При регистрации я также установил тип загрузки на onDemand, чтобы модуль загружался только тогда, когда я специально вызываю метод загрузки.

Так что в вашем сценарии вы можете загружать модуль B всякий раз, когда вам это нужно в модуле A.Это может быть вызвано некоторой бизнес-логикой для вашего приложения.

Чтобы ответить на ваш второй вопрос, вы можете просто передать свои параметры, используя функциональность параметров навигации службы навигации

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 свойство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...