前面的文章AgileEAS.NET之插件接口IModule对插件的基本契约宝义也就是接口做了一个介绍,本文将提供另一种模块插件的定义,采用属性标记插件。
我们定义了ModuleAttribute属性:

ModuleAttribute /// <summary>
/// EAS.NET模块插件属性。
/// </summary>
/// <remarks>
/// 提供IModule的标记实现,提供基于属性标记的插件实现。
/// </remarks>
[AttributeUsage(AttributeTargets.Class)]
public class ModuleAttribute : Attribute
{
private Guid guid = System.Guid.Empty;
private string name = string.Empty;
private string description = string.Empty;
/// <summary>
/// 初始化ModuleAttribute对象。
/// </summary>
/// <param name="guid">模块Guid。</param>
/// <param name="name">模块名称。</param>
public ModuleAttribute(string guid, string name)
{
this.guid = new Guid(guid);
this.name = name;
}
/// <summary>
/// 初始化ModuleAttribute对象。
/// </summary>
/// <param name="guid">模块Guid。</param>
/// <param name="name">模块名称。</param>
/// <param name="description">模块说明。</param>
public ModuleAttribute(string guid, string name,string description)
{
this.guid = new Guid(guid);
this.name = name;
this.description = description;
}
/// <summary>
/// 模块Guid。
/// </summary>
public string Guid
{
get
{
return this.guid.ToString();
}
set
{
this.guid = new Guid(value);
}
}
/// <summary>
/// 模块名称。
/// </summary>
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
/// <summary>
/// 模块说明。
/// </summary>
public string Description
{
get
{
return this.description;
}
set
{
this.description = value;
}
}
及ModuleRunAttribute属性

ModuleRunAttribute /// <summary>
/// 模块入口方法属性。
/// </summary>
/// <remarks>
/// 配合ModuleAttribute实现基于标记的IMoule模块。
/// </remarks>
[AttributeUsage(AttributeTargets.Method)]
public class ModuleRunAttribute : Attribute
{
/// <summary>
/// 初始化ModuleRunAttribute对象。
/// </summary>
public ModuleRunAttribute()
{
}
}
我们只需要在我们要公共的模块插件的类打上ModuleAttributes标记、在模块的入口调用方法上打上ModuleRunAttribute就可以了,以下为示例:

Hello /// <summary>
/// 基于标记实现的插件。
/// </summary>
[Module("CB58C5BB-5D15-4a17-802E-341F9F65F35C", "Hello例子", "基于标记的模块实现例子")]
public class Hello
{
/// <summary>
/// 入口方法。
/// </summary>
[ModuleRun]
public void Start()
{
MessageBox.Show("Hello...");
}
public void Start2()
{
MessageBox.Show("Hello2...");
}
}
在以上例子中,我们标记了一个模块插件,他的GUID属性为“CB58C5BB-5D15-4a17-802E-341F9F65F35C”,模块名称为Hello例子,入口方法为Start方法,特别声明一下,Start必须为一公共为参该当,Web模块不需要入口方法。
链接:AgileEAS.NET应用开发平台介绍
AgileEAS.NET之敏捷并行开发方法
敏捷软件工程实验室
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述