使用TouchSocket应用信使实现灵活的进程内通信

使用TouchSocket应用信使实现灵活的进程内通信

    • 一、应用信使的核心优势
    • 二、消息注册
      • 2.1 实例方法注册
      • 2.2 静态方法注册
    • 三、消息触发
    • 四、高级用法
    • 五、总结
    • 六、示例项目

引言

在软件开发中,进程内的消息通信机制是实现模块解耦、依赖倒置的重要手段。TouchSocket框架提供的应用信使(AppMessenger)组件,能够替代传统事件机制,支持跨程序集通信,同时提供更灵活的注册和触发方式。本文将详细介绍其核心功能及使用方法。

一、应用信使的核心优势

替代事件机制:通过消息注册/触发模式解耦模块依赖。

跨程序集通信:消息可在不同程序集中注册和调用。

依赖倒置:调用方无需直接引用目标对象。

支持异步:所有消息方法均基于Task实现异步通信。

二、消息注册

应用信使支持两种注册方式:实例方法和静态方法,使用AppMessage特性标记消息方法。

2.1 实例方法注册

实现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);

2.2 静态方法注册

声明静态类和方法:静态方法需标记[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的应用信使提供了一种高效、解耦的进程内通信方案,尤其适用于模块化开发场景。通过替代传统事件机制,开发者可以更灵活地管理组件依赖,同时通过异步支持提升系统性能。建议在跨程序集协作或复杂消息路由场景中优先使用此组件。

六、示例项目

  • GitHub仓库: https://github.com/RRQM/TouchSocket
  • Gitee仓库: https://gitee.com/rrqm_Home/touchsocket

示例项目地址:
https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/Core/AotDynamicMethodConsoleApp



如有疑问,欢迎在评论区讨论!

你可能感兴趣的:(开发语言,c#,网络,服务器,运维)