Загрузка вида призмы из оболочки, используя MEF - PullRequest
3 голосов
/ 20 декабря 2011

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

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

Пробовал использовать

moduleManager.LoadModule("ModuleA");

, но это работает только при первой загрузке модуля.Когда я вызываю вышеупомянутое, он загружает и инициализирует модуль, отображая вид.Если я затем снова закрываю представление, то во второй раз, когда я пытаюсь это сделать, оно не перезапускает представление (я предполагаю, что оно не инициализирует модуль заново, поскольку он уже загружен).

Итак, я думаю, чтодумал об использовании чего-то вроде следующего в моей оболочке:

var moduleAView = ServiceLocator.Current.GetInstance<ModuleAView>();
regionManager.Regions["TabRegion"].Add(ModuleAView);
regionManager.Regions["TabRegion"].Activate(ModuleAView);

Проблема этого подхода в том, как моя оболочка узнает о типе ModuleAView в строке 1?У меня нет ссылки на модуль A, и я не хочу добавлять его.Я думал о едином интерфейсе, который будет реализован ModuleAView, который мог бы использоваться совместно модулем и оболочкой, но я получил ошибку компоновки при попытке использовать подход ServiceLocator.GetInstance, как описано выше.

Большое спасибо за вашу помощь.

PS Это код модуля модуля, который я пробовал.

[ModuleExport(typeof(ModuleA), InitializationMode = InitializationMode.OnDemand)]
[Module(ModuleName="ModuleA")]
public class ModuleA : IModule
{
    private IRegionManager _regionManager;

    [ImportingConstructor]
    public ModuleA(IRegionManager regionManager)
    {
        this._regionManager = regionManager;
    }

    public void Initialize()
    {
        // add the search view to the region manager.
        this._regionManager.RegisterViewWithRegion("TabRegion", typeof(Views.ModuleAView));
    }
}

1 Ответ

1 голос
/ 21 декабря 2011

Возможно, думал об этом по неправильному пути.

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

Надеюсь, это поможет.

...