万宁市网站建设_网站建设公司_AJAX_seo优化
2025/12/22 13:27:23 网站建设 项目流程
1.prism 框架在VS中可以安装模板,这样使用起来方便

image

 2.DI(依赖注入)

以下是框架内自动注入的,也就是说在ViewModel中的构造函数可以直接使用,不需要再APP.CS中注册

比如像这个样,构造函数可以随便使用

 public MainWindowViewModel(IRegionManager regionManager, IModuleManager moduleManager, IEventAggregator eventAggregator, IDialogService aaa)

 

类别具体内容(按平台)生命周期核心用途
核心内置服务(全平台) IEventAggregator(事件聚合器) 单例 跨组件通信
  INavigationService(导航服务) 瞬时 页面 / View 导航
  IDialogService(弹窗服务) 单例 标准化弹窗管理
  IContainerRegistry/IContainerProvider(DI 容器接口) 单例 注册 / 解析服务
WPF 专属内置服务 IRegionManager(区域管理器) 单例 管理 WPF 的 Region 容器
  IModuleManager/IModuleCatalog(模块管理) 单例 模块化加载 / 管理
框架内部基础设施 ViewModelLocator、导航管道、容器内部组件 内部管理 框架底层运行(无需关注)

 

还有一种自定义的方式需要手动注册,再App.cs中

containerRegistry.Register<IUserService, UserService>(); // 瞬时(默认)
containerRegistry.RegisterSingleton<ISettingsService, SettingsService>(); // 单例
containerRegistry.Register<LocalDataCache>(); // 无接口的具体类型

3. View 与 ViewModel 的自动关联注册

如果 View(OrderView)和 ViewModel(OrderViewModel)满足「同命名空间 + View 后缀 / ViewModel 后缀」,Prism 的ViewModelLocator可自动关联,无需手动注册;

但是prism项目模板是不在同一个命名空间内,二十遵循了精准利用了 Prism 的扩展约定。

prism:ViewModelLocator.AutoWireViewModel="True"    这个二是自动关联开关;绑定上下文

小技巧添加以下代码,可再Xaml界面中使用转到定义功能

<!-- 1. 引入设计时命名空间(固定) -->xmlns:d="http://schemas.microsoft.com/expression/blend/2008"<!-- 2. 引入ViewModel命名空间(替换为你的实际命名空间) -->xmlns:vm="clr-namespace:YourApp.ViewModels"<!-- Prism自动装配(运行时生效) -->prism:ViewModelLocator.AutoWireViewModel="True"<!-- 3. 设计时DataContext(仅给VS看,不影响运行) -->d:DataContext="{d:DesignInstance Type=vm:OrderViewModel, IsDesignTimeCreatable=False}"

4.

4. 对话框(Dialog)注册

使用IDialogService的弹窗,必须手动注册:
// 注册对话框View+ViewModel
containerRegistry.RegisterDialog<ConfirmDialogView, ConfirmDialogViewModel>();// 注册带自定义弹窗样式的对话框(WPF)
containerRegistry.RegisterDialog<EditDialogView, EditDialogViewModel>("EditDialog");

 

5. 模块化注册

自定义模块(IModule实现类)需要手动注册,才能被框架加载:
// WPF:App.xaml.cs
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{// 注册启动时加载的模块moduleCatalog.AddModule<UserModule>();// 注册按需加载的模块moduleCatalog.AddModule<OrderModule>(initializationMode: InitializationMode.OnDemand);
}

6. 第三方组件 / 服务

// 注册HttpClient(单例)

containerRegistry.RegisterSingleton(() => new HttpClient { BaseAddress = new Uri("https://api.example.com") });

// 注册数据库上下文

(DbContext) containerRegistry.Register<AppDbContext>();

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询