引言
在软件开发中,进程内的消息通信机制是实现模块解耦、依赖倒置的重要手段。TouchSocket框架提供的应用信使(AppMessenger)组件,能够替代传统事件机制,支持跨程序集通信,同时提供更灵活的注册和触发方式。本文将详细介绍其核心功能及使用方法。
替代事件机制:通过消息注册/触发模式解耦模块依赖。
跨程序集通信:消息可在不同程序集中注册和调用。
依赖倒置:调用方无需直接引用目标对象。
支持异步:所有消息方法均基于Task实现异步通信。
应用信使支持两种注册方式:实例方法和静态方法,使用AppMessage特性标记消息方法。
实现IMessageObject接口:目标类需实现该接口(标记作用,无强制方法)。
标记消息方法:使用[AppMessage]特性声明异步公共方法。
注册实例对象:通常在构造函数中调用Register方法。
public class MessageObject : IMessageObject
{
public MessageObject()
{
AppMessenger.Default.Register(this); // 注册实例
}
[AppMessage]
public Task Add(int a, int b)
{
return Task.FromResult(a + b);
}
[AppMessage]
public Task Sub(int a, int b)
{
return Task.FromResult(a - b);
}
}
注意事项:
若未在构造函数中注册,后续可通过手动注册:
var messageObject = new MessageObject();
AppMessenger.Default.Register(messageObject);
声明静态类和方法:静态方法需标记[AppMessage]。
调用RegisterStatic注册:指定静态方法所在类。
public static class MessageObject // 无需实现IMessageObject
{
[AppMessage]
public static Task StaticAdd(int a, int b)
{
return Task.FromResult(a + b);
}
}
注册静态类:
AppMessenger.Default.RegisterStatic();
通过SendAsync方法发送消息,需指定返回值类型和方法标识(方法名)。
示例:调用实例方法
int addResult = await AppMessenger.Default.SendAsync("Add", 20, 10); // 返回30
int subResult = await AppMessenger.Default.SendAsync("Sub", 20, 10); // 返回10
示例:调用静态方法
int staticAddResult = await AppMessenger.Default.SendAsync("StaticAdd", 20, 10);
自定义AppMessenger实例:支持创建独立实例,避免全局冲突。
var customMessenger = new AppMessenger();
customMessenger.Register(myObject);
依赖注入整合:可将AppMessenger实例注入到服务容器中。
TouchSocket的应用信使提供了一种高效、解耦的进程内通信方案,尤其适用于模块化开发场景。通过替代传统事件机制,开发者可以更灵活地管理组件依赖,同时通过异步支持提升系统性能。建议在跨程序集协作或复杂消息路由场景中优先使用此组件。
示例项目地址:
https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/Core/AotDynamicMethodConsoleApp
如有疑问,欢迎在评论区讨论!