mirror of
https://github.com/RRQM/TouchSocket.git
synced 2025-12-20 02:16:42 +08:00
在多个 `.mdx` 文件中添加对 `TouchSocketCoreDefinition`、`TouchSocketHttpDefinition`、`TouchSocketDmtpDefinition`、`TouchSocketModbusDefinition`、`TouchSocketProModbusDefinition`、`TouchSocketNamedPipeDefinition`、`TouchSocketWebApiDefinition`、`TouchSocketJsonRpcDefinition` 和 `TouchSocketXmlRpcDefinition` 的导入。增加解析和处理定义部分的 JavaScript 脚本,确保导入的有效性和一致性。新增功能包括精确匹配定义部分的正则表达式、解析定义内容的函数、生成定义组件的函数、递归查找 `.mdx` 文件的功能,以及验证导入的有效性
89 lines
2.0 KiB
Plaintext
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);
|
|
```
|