Files
TouchSocket/handbook/versioned_docs/version-2.0/appmessenger.mdx
若汝棋茗 72e0a65742 feat(docs): 添加多个组件的导入和解析功能
在多个 `.mdx` 文件中添加对 `TouchSocketCoreDefinition`、`TouchSocketHttpDefinition`、`TouchSocketDmtpDefinition`、`TouchSocketModbusDefinition`、`TouchSocketProModbusDefinition`、`TouchSocketNamedPipeDefinition`、`TouchSocketWebApiDefinition`、`TouchSocketJsonRpcDefinition` 和 `TouchSocketXmlRpcDefinition` 的导入。增加解析和处理定义部分的 JavaScript 脚本,确保导入的有效性和一致性。新增功能包括精确匹配定义部分的正则表达式、解析定义内容的函数、生成定义组件的函数、递归查找 `.mdx` 文件的功能,以及验证导入的有效性
2025-07-09 22:22:17 +08:00

89 lines
2.0 KiB
Plaintext

---
id: appmessenger
title: 应用信使
---
import { TouchSocketCoreDefinition } from "@site/src/components/Definition.js";
### 定义
<TouchSocketCoreDefinition />
## 一、说明
应用信使是在进程内的,行使注册和触发功能的组件。可**代替事件**,可**跨越程序集**,可**依赖倒置**。
## 二、注册
下列演示时,是使用`AppMessenger.Default`默认实例,实际上,用户可以自己新实例化的`AppMessenger`。
### 2.1 注册实例
首先让类实例实现`IMessageObject`接口,然后在实例类中声明**异步公共实例**方法,并使用`AppMessage`特性标记。
然后一般情况下,建议在构造函数中,注册消息。
```csharp {5} showLineNumbers
public class MessageObject : IMessageObject
{
public MessageObject()
{
AppMessenger.Default.Register(this);
}
[AppMessage]
public Task<int> Add(int a, int b)
{
return Task.FromResult(a + b);
}
[AppMessage]
public Task<int> Sub(int a, int b)
{
return Task.FromResult(a - b);
}
}
```
:::info 信息
对于实例类,如果构造函数中,没有注册消息,那么在构造函数之后,也可以使用其**实例**注册消息。
```csharp {2} showLineNumbers
var messageObject = new MessageObject();
AppMessenger.Default.Register(messageObject);
```
:::
### 2.1 注册静态方法
注册静态方法,只需在类中直接声明**异步公共实例**方法,并使用`AppMessage`特性标记即可。
```csharp showLineNumbers
public static class MessageObject : IMessageObject
{
[AppMessage]
public static Task<int> StaticAdd(int a, int b)
{
return Task.FromResult(a + b);
}
}
```
使用`RegisterStatic`进行注册
```csharp showLineNumbers
AppMessenger.Default.RegisterStatic<MessageObject>();
```
## 三、触发
触发时,泛型类型,即时返回值类型。
```csharp showLineNumbers
int add = await appMessenger.SendAsync<int>("Add", 20, 10);
int sub =await appMessenger.SendAsync<int>("Sub", 20, 10);
```