Я пытаюсь передать наше приложение, которое использовало старую Prism 4.0, до последней версии Prism 7.1.0.431
Я почти закончил, все компилируется.Внедрение зависимостей было обновлено для использования последней версии Unity.Таким образом, все кажется верным, как я вижу, инъекция работает несколько.
Хотя у меня все еще есть проблема с загрузкой модуля: менеджер области не может быть решен.Я думаю, что чего-то не хватает в моем коде инициализации, но не могу найти соответствующую документацию по этому вопросу.Попробуйте пробовать все примеры Prism.Wpf, но можете найти соответствующий код.
Вставка менеджера региона в модуле, вероятно, не очень хорошая практика из кода, который я вижу при поиске ответа на мою проблему, но имейте в видуСо мной, прямо сейчас, это огромное приложение, и я бы хотел избежать как можно большего изменения:
Вот ошибка исключения, которую я имею:
ИСКЛЮЧЕНИЕ: Prism.Modularity.ModuleInitializeException: исключение произошло при инициализации модуля 'AdvancedExportModule'.- Сообщение об исключении было следующим: не удалось разрешить зависимость, type = 'Codex.Modules.AdvancedExport.AdvancedExportModule', name = '(none)'.Исключение произошло во время: при разрешении.Исключение: InvalidOperationException - Текущий тип, Prism.Regions.IRegionManager, является интерфейсом и не может быть создан.Вам не хватает сопоставления типов?
Не хватает ли у меня кода инициализации для того, чтобы RegionManager отображался и корректно вводился Unity?
Вот пример кода, который я попытался простобольшинство из них и, надеюсь, вам достаточно понять, что не так ... Это мой App.xaml:
<prism:PrismApplication x:Class="Codex.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
<ResourceDictionary Source="Resources/Merged.xaml"/>
</Application.Resources>
</prism:PrismApplication>
И в моем коде позади App.xaml.cs
namespace MyNamespace
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Threading;
using Prism.Ioc;
using Prism.Logging;
using Prism.Modularity;
using Prism.Unity;
public partial class App : PrismApplication
{
private static ILoggerFacade Logger { get; set; }
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
protected override void OnStartup(StartupEventArgs startupEventArgs)
{
base.OnStartup(startupEventArgs);
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
var modulesFilePaths = new Dictionary<string, string>();
modulesFilePaths.Add("Namespace.Modules.Module1.dll", "Namespace.Modules.AdvancedExport.Module1Module");
var pathToExecutingLibrary = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName;
foreach (KeyValuePair<string, string> moduleFilePath in modulesFilePaths)
{
var referenceUri = Path.Combine(pathToExecutingLibrary, moduleFilePath.Key);
var assembly = Assembly.LoadFrom(referenceUri);
var type = assembly.GetType(moduleFilePath.Value);
moduleCatalog.AddModule(
new ModuleInfo(type)
{
ModuleName = type.Name,
Ref = referenceUri,
InitializationMode = InitializationMode.WhenAvailable
});
}
moduleCatalog.Initialize();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
ConfigureViewModelLocator();
var containerExtension = CreateContainerExtension();
containerRegistry.RegisterInstance(containerExtension);
// These methods have been commented out they are use to register all the types of the application.
//RegisterSettings(containerRegistry);
//RegisterServices(containerRegistry);
//RegisterHandlers(containerRegistry);
//RegisterWrappers(containerRegistry);
containerRegistry.RegisterInstance(Dispatcher.CurrentDispatcher);
}
protected override Window CreateShell()
{
Window mainShell = Container.Resolve<MainShell>();
return mainShell;
}
}
}