2015-12-18 1 views
0

Я регистрирую свои представления модулей в методе Initialize класса модуля таким образом;PRISM: Как внедрить RegisterViewForNavigation внутри метода Initialize модуля?

//CalendarModule.cs 
public void Initialize() 
{ 
    _container.RegisterType<object, CalendarModuleView>(nameof(CalendarModuleView));    
} 

И загружаю модули, позвонив по номеру ModuleManager.LoadModule("CalendarModule");. После инициализации модуля я перехожу к моему недавно загруженному модулю;

_regionManager.RequestNavigate(RegionNames.MainContentRegion, "CalendarModuleView"); 

До сих пор никаких проблем. Все, что я ожидал, все работает. Я могу перемещаться по всем модулям по требованию.

Но когда я пытаюсь заменить регистрацию вида на _container.RegisterTypeForNavigation<CalendarModuleView>();, я получаю следующую ошибку при загрузке модуля;

Исключение типа «Prism.Modularity.ModuleInitializeException» произошло в Prism.Wpf.dll, но не был обработан в пользовательском коде

Дополнительная информация: Исключение при инициализации модуля «CalendarModule».

Внутреннее исключение: {"Не удалось загрузить файл или сборку" Prism.Unity.Wpf, Version = 6.2.0.0, Culture = neutral, PublicKeyToken = 91a96d2a154366d8 'или одна из его зависимостей. Определение манифеста расположенной сборки не соответствует опорный узел (Исключение из HRESULT: 0x80131040). ":" Prism.Unity.Wpf, Version = 6.2.0.0, культура = нейтральной, PublicKeyToken = 91a96d2a154366d8" }

Интересно, если RegisterTypeForNavigation<T> контейнер метод расширения делает такая же работа с RegisterType<object, T>(nameof(T)) метод контейнера. Если да, что вызывает предыдущую ошибку? Благодаря!

FYI: Режим инициализации моих модулей - OnDemand.

Я использую Prism.Unity как контейнер DI.

+1

Разверните ли вы Prism.Unity.Wpf.dll. Он существует в папке, откуда вы запускаете приложение? – Jehof

+1

Я подозреваю, что вы используете разные проекты для «CalendarModule» и основного приложения? Если это так, попробуйте обновить пакеты prism nuget для каждого из них. – Domysee

+0

@ Domysee Да, вы правы. Мои модули - отдельные проекты внутри решения. Я понял, что пакеты основных проектов были старыми. После обновления nuget проблема была решена. Спасибо! –

ответ

1

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

Visual Studio копирует только сборки, указанные в основном проекте, в выходной каталог.

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

Обновление всех пакетов должно устранить проблему.

Смежные вопросы