记录一次Prism9隐式注册引发的事件聚合器失效问题

news/2025/11/6 1:46:30/文章来源:https://www.cnblogs.com/guchen33/p/19195010

直接上代码
1、我的注册从App的RegisterTypes方法迁移到了模块

 public class AccountModule : IModule{public void OnInitialized(IContainerProvider containerProvider){}public void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.RegisterSingleton<LoginAccount>();}}

虽然我是立即执行的引用模块

 protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog){Logger.WriteLocal("开始加载dll");Assembly.LoadFrom(@"Music.Core.dll");Logger.WriteLocal("开始加载模块");moduleCatalog.AddModule<AccountModule>(InitializationMode.WhenAvailable);var m = moduleCatalog.Modules.First(me => me.ModuleName == nameof(AccountModule));Logger.WriteLocal($"🔍 模块 {m.ModuleName} 状态 = {m.State}");}

但是log显示NotStarted
我虽然登录的时候写了

 public class LoginWindowViewModel : BindableBase{private readonly LoginAccount _loginAccount;public LoginWindowViewModel(IEventAggregator eventAggregator, LoginAccount loginAccount){_eventAggregator = eventAggregator;LoginCommand = new DelegateCommand<Window>(ExecuteLogin);}private IEventAggregator _eventAggregator;private void ExecuteLogin(Window window){_logger.WriteLocal("🚀 准备发布 LoginEvent");_eventAggregator.GetEvent<LoginEvent>().Publish(window);}public ICommand LoginCommand { get; set; }}

但是事件聚合器

 public class LoginAccount{private readonly IEventAggregator _eventAggregator;private ITangdaoLogger _logger = TangdaoLogger.Get(typeof(LoginAccount));public LoginAccount(IEventAggregator eventAggregator){_eventAggregator = eventAggregator;var token = _eventAggregator.GetEvent<LoginEvent>().Subscribe(Login);_logger.WriteLocal($"✅ LoginAccount 订阅完成,token={token.GetHashCode()}");}private void Login(Window window){window.DialogResult = true;}}

并没有进入
因为隐式注册的时候LoginAccount的生命周期是短暂的或者没有传递,此时,我改为

  private readonly LoginAccount _loginAccount;public LoginWindowViewModel(IEventAggregator eventAggregator, LoginAccount loginAccount){_eventAggregator = eventAggregator;_loginAccount = loginAccount;LoginCommand = new DelegateCommand<Window>(ExecuteLogin);}

我只是引入了字段,现在成功了
说明1、可能被GC回收了
2、Prism默认的解析机制,与微软的ServiceCollection不同,ServiceCollection是注册了类才能解析,而Prism具有隐式注册机制,比如程序启动的时候

 return Container.Resolve<MainWindow>();

我们明明没有对MainWindow进行注册,但是却可以解析出来,而ServiceCollection不可以,
这个隐式注册的生命周期是瞬态的,导致拿到的不是同一个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20232318 2025-2026-1 《网络与系统攻防技术》实验四实验报告

一、实验内容 本次实验围绕恶意代码分析的核心流程展开,具体包含四项关键任务:一是识别恶意代码的文件类型标识,完成文件脱壳操作与字符串提取,为后续分析扫清障碍;二是运用 IDA Pro 工具对指定 exe 文件开展静态…

用友U8C销售订单开单比较慢

1.登录软件录SPRso_accountmany_m比较耗时 2.检查so_accountmany_m的索引SELECTa.uniqueness 索引类型,b.index_name 索引名称,b.column_name 字段,a.table_name 表名 FROMuser_indexes a ,user_ind_columns b WHEREa.…

Winfrom机器人自动寻路

Winfrom机器人自动寻路public partial class Form1 : Form{private const int MapWidth = 25;private const int MapHeight = 20;private const int CellSize = 50;private List<Obstacle> obstacles = new List…

低代码平台基础知识

1.数据导入 在数据源将数据库下的物理表导入为数据模型 新建 → 数据库表模型 → 搜索 → 导入目录 一 连接方式(实时连接/只读模式/读写模式) 2.空白模型 使用空白模型定义表结构 新建 → 空白模型 切换到字段列表 →…

test first

记录第一次使用 简单写一点内容看看效果展示 展示

Win11 install CUDA 12.5

1.Check pc supported Nvidia GPUnvidia-smi 2.Download CUDA12.5https://developer.download.nvidia.cn/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.85_windows.exe3.Install CUDA12.5//validate nvcc --…

机器学习-逻辑回归算法-向量版代码

`import numpy as np x_train=[[1,2],[1,3],[1,6],[1,9],[1,2],[1,3],[1,6],[1,9]] y_train=[1,1,0,0,1,1,0,0] x_train_num=len(x_train) 向量化训练组 x_a=np.array(x_train) x_v=(x_a.T) y_v=np.array(y_train) pri…

星期三

今天离散和马原感觉没啥意思。早上第1节课太困了。睡着了。

「学习笔记」文件包含

文件包含开发人员常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程就叫做包含。文件包含漏洞 通常出现在动态网页中,有时候由于网站功能需求,会让前端用户选…

【AI说Rust 03】如何在 macos m1 系统搭建 rust 开发环境

在 macOS M1 上搭建 Rust 开发环境非常直接,主要依赖于官方工具 rustup。下面我为你梳理了一份清晰的步骤指南,包含一些实用技巧。 🔧 安装步骤概览 首先,我们来快速了解核心步骤:步骤 关键操作/命令 说明1. 安装…

厨房小白学做饭——4.干锅菜花

1.将菜花掰成朵,倒入清水,少加入一些盐,泡10分钟左右; 2.切一些五花肉备用【五花肉去皮】,切成片,薄厚均匀就行; 3.将线椒切成丝【建议红绿都来点,好看一些】,也可用小米椒切丝,再来四五瓣蒜,拍一下; 4.锅…

操盘计划202511090017

好的,我们来整合信息,直接回答您的两个核心问题。 问题一:哪几只股票重复次数最高? 这里的“重复次数”指的是在所有模型(xgb, lr, rf, svr)和所有预测时间点的综合预测中,同一只股票出现的总次数。次数越高,说…

Effective C++

条款01:视C++为一个语言联邦多重范型编程语言,在某个次语言中,各种高效编程守则简单易懂;但从一个语言移到另一个语言,守则可能改变。 次语言类型:C: Object-Oriented C++: Template C++: STL:条款02: 尽量以co…

厨房小白学做饭——3.虎皮青椒

1.螺丝椒洗好控干水分,同时准备几瓣大蒜,拍一下然后剁碎; 2.去除辣椒籽,将辣椒拍一下,然后切成小段; 3.起锅加油,油热后放入辣椒,用铲子按压,使辣椒受热均匀【火不要开的太大,容易把辣椒炒焦】,边按压边翻炒…

20251105 之所思 - 人生如梦

20251105 之所思今天做的好的事情:1. 主动汇报 和直接上级有一个两周一次半小时的会议,汇报SW这边的一些状态和数据,今天可能是升职以来第一次正式的主动汇报,以前虽然会议是book了,但是每次都是因为老板的时间导…

【Kubernetes】入门-部署Spring应用

Kubernetes 基本概念 Pod 是什么: Kubernetes 中最小的、最简单的部署和管理单元。 类比: 一台“逻辑主机”或一个“虚拟机实例”。 关键点:一个 Pod 可以包含一个或多个紧密相关的容器(例如,一个应用容器和一个日…

第16天(简单题中等题 二分查找)

打卡第十六天 4道简单题+1道中等题 耗时≈一小时 明天继续

Java项目常用异常处理场景与实战指南

在Java开发中,异常处理直接决定了系统的健壮性和可维护性。不合理的处理方式可能导致系统崩溃、数据丢失或调试困难,而规范的处理能让系统在异常场景下优雅降级。本文结合实际项目经验,梳理高频异常场景及解决方案,…

newDay18

1.今天主要是背背单词,把作业写了一部分 2.明天把不会的东西补补 3.没啥问题

11月5日

上午离散和马原 下午学四级