插件系统
定义
命名空间:TouchSocket.Core
程序集:TouchSocket.Core.dll
一、说明
插件系统是一组能实现多播订阅的,可中断的触发器,其主要功能就是实现类似事件、委托的通知消息。其设计核心来自于AspNetCore
的中间件,它有着和中间件一样的使用体验,同时也有着更高的灵活性和自由度。
二、产品特点
- 简单易用。
- 易扩展。
三、产品应用场景
- 所有可以使用事件。委托的场景。
四、与事件、委托相比
- 订阅的时候可以不用知道被订阅方是谁,只需要知道要订阅什么通知即可。
- 订阅可以随时中断。例如:当事件多播的时候,即使其中一个订阅方已经处理,触发也不会停止,这样会造成资源浪费。
- 订阅回调。例如:第一个订阅方,想知道本次触发的最终结果是否已被处理时,委托则做不到。而插件则可以。
- 插件可以被继承,可以被扩展。
- 插件可以被注入。
- 插件可以独立负责相关功能,实现功能独立。可模块化功能。
五、创建插件
5.1 新建插件接口及事件类
public class MyPluginEventArgs : PluginEventArgs
{
public string Words { get; set; }
}
/// <summary>
/// 定义一个插件接口,使其继承<see cref="IPlugin"/>
/// </summary>
public interface ISayPlugin : IPlugin
{
/// <summary>
/// Say。定义一个插件方法,必须遵循:
/// 1.必须是两个参数,第一个参数可以是任意类型,一般表示触发源。第二个参数必须继承<see cref="PluginEventArgs"/>
/// 2.返回值必须是Task。
/// </summary>
/// <param name="sender">触发主体</param>
/// <param name="e">传递参数</param>
/// <returns></returns>
Task Say(object sender, MyPluginEventArgs e);
}
注意事项
确定插件唯一的是插件中的类型
,所以要求一个插件中只允许有一个插件方法。