WPF 手撸插件 五 消息总线

news/2024/9/18 15:23:51/ 标签: wpf

虽然暂时不知道该如何将消息总线集成到插件系统中,但是让我先学习起来吧,本文主要来说说我最近学习的Reface.EventBus

Reface.EventBus有两个版本,分别支持.Net Framework和 .Net Core。

 我们这里先说支持.Net Framework的版本,先在项目中引入,如下图。

运行效果如下图。

 

定义一个新事件,代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Reface.EventBus;namespace EventBusDemo
{//定义一个新事件public class ConsoleStarted: Event{public ConsoleStarted(object source) : base(source){Console.WriteLine("控制台启动");}}
}

定义一个监听上面事件的类,代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Reface.EventBus;namespace EventBusDemo
{//创建一个监听事件public class OnConsoleStarted : IEventListener<ConsoleStarted>{public void Handle(ConsoleStarted @event){Console.WriteLine("信息发布者:"+@event.Source+"监听到控制台启动");foreach (string key in @event.Context.Keys){Console.WriteLine("消息内容关键字:" + key + "---消息内容:" + @event.Context[key].ToString());}}}
}

在Main函数中定义消息并发布消息。代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Reface.EventBus;namespace EventBusDemo
{class Program{static void Main(string[] args){//创建一个EvenBus的单例IEventBus eventBus = new DefaultEventBus();ConsoleStarted consoleStarted = new ConsoleStarted("张三");consoleStarted.Context.Add("问候语","你好我是张三");//发布启动控制台的消息eventBus.Publish(consoleStarted);Console.ReadLine();}}
}

让我们皮一下,如果到 这里你就开始运行项目,那么你会发现你获得了一个NULL,哈哈。这是因为在.Net Framework中需要设置配置文件后才能正常运行,哪个是配置文件?就行项目中的App.config文件。

App.config文件内容如下。

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="eventBus" type="Reface.EventBus.Configuration.EventBusSection, Reface.EventBus"/></configSections><eventBus><listeners><add type="EventBusDemo.OnConsoleStarted, EventBusDemo" /></listeners></eventBus><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup>
</configuration>

还不会吗?那我又示例提供呦~!不过需要你的积分,哈哈,欢迎各位大佬下载。

https://download.csdn.net/download/xingchengaiwei/89651412

内容扩展,上面的示例只是让我们快速的开始使用Reface.EventBus,下面根据官网的说明,补充一下。

1、注册监听者的方式

除了通过 config 文件的方法,我们还提供了其它方法来注册监听者。

只要实现了 Reface.EventBus.IEventListenerFinder 并在构造 DefaultEventBus 时作为参数传入,便可以订制的方式注册监听者。 目前自带的注册方式有:

  • Reface.EventBus.EventListenerFinders.ConfigurationEventListenerFinder 通过 config 文件来注册
  • Reface.EventBus.EventListenerFinders.AssembliesEventListenerFinder 通过注册程序集,并返反射其中的类型来得到所有实现了 Reface.EventBus.IEventListenerFinder 的成员
  • Reface.EventBus.EventListenerFinders.DefaultEventListenerFinder 通过编码的方式注册监听者

2、定义监听者的执行顺序。

向 IEventListener 的实现类再添加 IPrioritized 接口,并实现 Priority 属性,便可以指定执行的顺序。

  • Priority 的值越小,越先执行
  • 未实现 IPrioritized 的 IEventListener 认为 Priority = 0

http://www.ppmy.cn/news/1517197.html

相关文章

【问题记录】mysql报错 ,mysql2 和 mysql 5.

错误2 和 错误5 都是由于注册表有问题&#xff1a; 由于我之前安装过MySQL&#xff0c;导致之前的配置没有删除。 解决&#xff1a; 搜索打开注册表编辑器&#xff1a; 注册表中找到MySQL: 修改路径&#xff1a; "D:\develop\mysql-8.0.39-winx64\bin\mysqld&quo…

边缘物联网平台AIoTedge推荐

AIoTedge是一个创新的智能边缘计算平台&#xff0c;它通过边云协同的架构设计&#xff0c;实现了多点部署和分布式计算&#xff0c;提高了数据处理的速度和效率&#xff0c;同时确保了数据的安全性和隐私性。平台具备强大的分布式AIoT处理能力&#xff0c;适用于多种场景&#…

【中学教资-信息技术】图像/音频/视频文件大小的计算

图像/音频/视频文件大小的计算 1 图像文件2 音频文件3 视频文件4 例题5 总结 视频讲解&#xff1a;音频文件大小/视频文件大小计算-失舵之舟 1 图像文件 压缩比原始大小/被压缩之后大小 颜色深度&#xff1a;指图像中每个像素所占的二进制位数&#xff08;bit&#xff09; n位…

linux查看系统安装时间命令,找出Linux操作系统(OS)安装日期和时间

你可能想知道你的计算机上何时安装了Linux操作系统,即OS的安装日期和时间,使用tune2fs、dumpe2fs、ls、basesystem、setup、setuptool命令能出来结果。请注意,如果你从模板安装了操作系统,那么它将显示模板生成日期,而不是实际操作系统安装日期。 方法1:如何使用tune2fs…

Solidity入门——receive()和fallback()以及交易数据的简单介绍和运用

如何运用payable和transfer发送交易 在以太坊智能合约中&#xff0c;payable关键字和.transfer()方法它们在智能合约中是如何被使用的。 payable关键字 payable关键字用于声明合约或函数可以接受以太币。当你在一个函数或合约前面加上payable修饰符时&#xff0c;你允许该函…

java程序优化

Java程序的性能优化是一个复杂但非常重要的过程&#xff0c;它涉及多个方面。首先&#xff0c;我们需要识别性能瓶颈的具体位置&#xff0c;这通常可以通过性能分析工具&#xff08;如JProfiler, VisualVM等&#xff09;来完成。以下是一些通用的优化策略&#xff1a; 代码层面…

软件测试学习笔记丨Pytest配置文件

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/31774 一、Pytest配置文件 1.1 pytest.ini的定义 pytest.ini是pytest的配置文件&#xff1b;可以修改pytest的默认行为&#xff1b;不能使用任何中文符号&#xff0c;包括汉字、空格、引号、…

Kafka分布式集群部署实战:跨越理论,直击生产环境部署难题与解决方案,性能调优、监控与管理策略大揭秘,轻松上手分布式消息中间件

本文介绍kafka的集群如何部署和安装&#xff0c;1-4章理论知识&#xff0c;第5章详解集群的部署&#xff0c;部署Kafka之前需要先部署好分布式的Zookeeper&#xff0c;不喜欢理论的可以直接看第5章&#xff0c;欢迎大家一起探讨技术&#xff01; Zookeeper集群部署参考文章&…

JavaScript 数据结构 ==== 二叉树

目录 二叉树 结构 二叉树和二叉搜索树介绍 1.创建树 2.插入一个键 3.树的遍历 中序排序 先序遍历 后序遍历 4.搜索树中的值 5.删除节点 二叉树 在计算机科学中&#xff0c;二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtre…

【数据结构】优先级队列 — 堆

文章目录 前言1. 优先级队列1.1 概念1.2 特性 2. 堆2.1 概念2.2 存储方式 3. 堆的模拟实现3.1 堆的创建3.2 堆的插入3.3 堆的删除 4. PriorityQueue4.1 注意事项4.2 构造器介绍4.3 常用方法介绍 5. 经典题型6. 结语 前言 我们之前学习过队列&#xff0c;它是遵循先进先出原则的…

全国教育大模型完成备案已达40个

全国教育大模型完成备案已达40个 近期&#xff0c;教育行业正迎来一场由人工智能引领的革新风暴&#xff0c;近日&#xff0c;职业培训机构粉笔上线了AI老师“粉笔头”&#xff0c;被称为首个职教行业的垂直大模型。据最新统计&#xff0c;截至今年6月&#xff0c;我国教育领域…

中资优配:国家推动大规模投资更新能源重点领域设备

8月21日&#xff0c;国家开展变革委、国家动力局联合印发《动力要点领域大规模设备更新施行方案》&#xff08;以下简称《方案》&#xff09;&#xff0c;清晰将要点推进施行煤电机组节能改造、供热改造和灵活性改造“三改联动”&#xff0c;输配电、风电、光伏、水电等领域完成…

mac Let‘s Encrypt 免费SSL证书申请

1、安装certbot brew install certbot 2、执行命令 sudo certbot certonly -d "iot.xxx.cn" --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory 3、域名解析配置 4、按Enter继续 5、生成证书 fullchain.pem 是证书文…

GPS北斗授时服务器(网络时钟系统)助力金融领域

GPS北斗授时服务器&#xff08;网络时钟系统&#xff09;助力金融领域 GPS北斗授时服务器&#xff08;网络时钟系统&#xff09;助力金融领域 摘 要:首先对计算机网络时间同步相关技术进行了介绍,然后阐述了时间同步技术在现代计算机网络中的应用与发展,最后指出时间同步网络在…

【奇某信-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

嵌入式机器视觉的流水线分拣机器人:OpenCV、 FreeRTOS、 TensorFlow(代码详解)

一、项目概述 在现代自动化生产中&#xff0c;分拣机器人作为提高生产效率和准确度的重要工具&#xff0c;正逐渐成为工业流水线的核心组成部分。本项目旨在设计一款基于嵌入式机器视觉的流水线分拣机器人&#xff0c;通过高效的图像处理与实时控制技术&#xff0c;实现对物品…

【XR】SDK的接口规划与设计

【XR】SDK的接口规划与设计 1. **模块化与扩展性****设计思路****设计理由** 2. **状态管理的清晰性****设计思路****设计理由** 3. **用户体验与易用性****设计思路****设计理由** 4. **稳定性和容错性****设计思路****设计理由** 5. **性能优化与实时性****设计思路****设计理…

C++中 inline 的含义是什么?

在C中&#xff0c;inline是一个关键字&#xff0c;它向编译器发出一个请求&#xff08;注意&#xff0c;这是一个请求而不是命令&#xff09;&#xff0c;请求编译器尝试将函数的调用替换为函数体本身的代码。这样做的目的是减少函数调用的开销&#xff0c;特别是对于那些体积小…

从小鹏看自动驾驶发展趋势

 小鹏&#xff1a;端到端大模型量产落地&#xff0c;体验升级成下阶段主线 算法端&#xff0c;小鹏已量产国内首个端到端大模型&#xff0c;其模型采用分段式结构&#xff0c;分为神经网络 XNet、规控大模型 XPlanner 以及大语言模型 XBrain 三部分。数据闭环方面&#xff0…

【linux】sar -d 磁盘性能

概述 sar -d 命令是 sysstat 包的一部分&#xff0c;用于收集、报告和保存系统活动信息。使用 -d 选项时&#xff0c;sar 会提供有关系统磁盘活动的详细报告。 以下是 sar -d 命令输出的主要字段及其含义&#xff1a; DEV: 报告的设备&#xff08;例如 sda, sdb&#xff09;…