将普通Wpf项目改成Prism项目
- 下载Nuet包
a.通过NuGet安装程序包:Prism.DryIoc, 其中Prism有两种Ioc容器,DryIoc和Unity,推荐使用DryIoc
安装提醒:C# Prism框架库 9.0.106版本中,出现“Prism.Container.Abstractions”库,强名称验证失败问题,最新版本9.0.537已解决此问题。
https://blog.csdn.net/JueHenDaDa/article/details/142712998
2. 修改App.xaml文件
把<Appliction>换成<prism:PrismApplication>。
且引入prism命名空间:xmlns:prism="http://prismlibrary.com/"。
且去掉StartupUri="MainWindow.xaml"。
3. 修改App.xaml.cs文件
App原来继承Application,换成继承PrismApplication。
并且重写两个方法CreateShell()和RegisterTypes()。
解决报错
using Prism.DryIoc;
using Prism.Ioc;
using System.Windows;namespace Prism
{/// <summary>/// App.xaml 的交互逻辑/// </summary>//2.把App文件中的Application改为PrismApplicationpublic partial class App : PrismApplication{// Shell外壳,创建一个外壳,意思:创建一个启动窗体,控制应用程序启时,启动的第一个窗体。// CreateShell()===>StartupUri二选一protected override Window CreateShell(){// 这里需要返回你的主窗口实例,例如:// return new MainWindow();// 如何拿第一个窗体?Ioc容器。//Container.Resolve<MainWindow>();//Container.Resolve(typeof(MainWindow));return null;}protected override void RegisterTypes(IContainerRegistry containerRegistry){// 在这里注册你的依赖项}}
}
// StartUri和CreateShell()谁先执行呢?CreateShell()后执行。protected override Window CreateShell(){Console.WriteLine("3。cccccc");// Container.Resolve<Window1>()只是从Ioc中拿到Window1窗体,并启动。//return Container.Resolve<MainWindow>();return null;}protected override void Initialize(){Console.WriteLine("2。bbbbbb");base.Initialize();//Login login = new Login(); // 实例化的,将来可以从IOC中拿到。/*var login = Container.Resolve<Login>();if (login.ShowDialog() != true){Application.Current.Shutdown();}*/}private void PrismApplication_Startup(object sender, StartupEventArgs e){Console.WriteLine("1。aaaaaa");}// 注册类型 向IOC中注册各种对象protected override void RegisterTypes(IContainerRegistry containerRegistry){// 把窗体对象注册到IOC容器containerRegistry.RegisterSingleton<Login>();containerRegistry.RegisterForNavigation<Window2, Window2ViewModel>();}