轻量级任务管理系统框架开发总结

📅 2026/7/31 9:39:04 👁️ 阅读次数 📝 编程学习
轻量级任务管理系统框架开发总结

Taskon是一个基于ASP.NET Core 8 Blazor+AntDesignBlazor打造的一个跨平台、轻量级、适合快速开发的小项目框架。

框架仅提供导航监控面板日志管理三个基础功能,但支持以插件的形式扩展功能与页面。

框架原生支持配置的热更新,理论上插件修改了配置后只需在监控面板软重启便可应用配置,无需重启进程。

除AntDesign字体图标外,框架还内置MaterialDesign字体图标,无需额外配置自动导入,直接使用类名即可。

更多图标参考MaterialDesign图标库:Material Design Icons - Icon Library - Pictogrammers

<iclass="mdi mdi-stop"></i>

实现原理很简单,另外注册一个虚拟文件提供程序,将字体及样式表文件放到wwwroot目录下并设置为嵌入的资源。

// 从磁盘加载静态资源 app.UseStaticFiles(); // 从Taskon程序集加载嵌入的静态资源 app.UseStaticFiles(new StaticFileOptions { FileProvider = new ManifestEmbeddedFileProvider(typeof(TaskonApplication).Assembly, "wwwroot") });

开始

新建一个Blazor Server项目,修改Main方法为如下:

public static void Main(string[] args) { var app = new TaskonApplication(); var additionalAssemblies = [typeof(Program).Assembly]; var pluginType = typeof(DataCoHj212Plugin); app.Run(args, additionalAssemblies, pluginType, builder => { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { builder.Host.UseWindowsService(); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { builder.Host.UseSystemd(); } }); }

其中additionalAssemblies参数用于附加业务程序集,指定pluginType以创建插件实例。

二次开发

开发业务项目时需要实现插件TaskPlugin,并使用TaskPluginMetadata描述插件元数据,公开接口定义如下:

public abstract class TaskPlugin { /// <summary> /// 菜单信息 /// </summary> public abstract List<MenuItem> Menus { get; } /// <summary> /// 配置服务依赖 /// </summary> /// <param name="services"></param> public abstract void Install(IServiceCollection services); /// <summary> /// 获取插件状态 /// </summary> public bool IsEnabled { get; } /// <summary> /// 启动插件 /// </summary> public void Start() { OnStarting(); _isEnabled = true; } protected abstract void OnStarting(); /// <summary> /// 停止插件 /// </summary> public void Stop() { OnStopping(); _isEnabled = false; } protected abstract void OnStopping(); /// <summary> /// 重启插件 /// </summary> public void Restart() { Stop(); Start(); } /// <summary> /// 获取任务插件的Id /// </summary> public string Id => _metadata.Id; /// <summary> /// 创建视图 /// </summary> /// <param name="title">标题</param> /// <param name="content">视图组件</param> protected void AddView(string title, RenderFragment content) { _views.Add(new ComponentView { Id = _views.Count, Title = title, Content = content }); } }

对于业务插件而言,需要实现的接口为:InstallOnStartingOnStoppingMenus

框架提供的监控面板页面默认提供启动/停止插件查看插件信息功能,具体的监控页面由插件实现,通过AddView方法将页面托管至监控面板。AddView方法可调用多次,当插件添加了多个视图时,监控面板呈现为多Tab形式。

除监控面板以外的页面建议添加为菜单,菜单图标仅支持AntDesignBlazor内置图标。

示例

以下代码定义了一个数据转发插件。

[TaskPluginMetadata("DataCo_HJ212", "万维盈创数据转发程序", "从万维盈创数采仪读取数据并通过HJ212协议上传至道农云")] public class DataCoHj212Plugin : TaskPlugin { public override List<MenuItem> Menus => new() { new MenuItem { Key = "setting", Title = "参数设置", Href = "/setting", IconType = "setting" } }; public DataCoHj212Plugin() { AddView("实时监控", builder => { builder.OpenComponent<RealtimeMonitor>(0); builder.CloseComponent(); }); } public override void Install(IServiceCollection services) { services.AddSingleton(xxx); } protected override void OnStarting() { // 实现插件启动逻辑 } protected override void OnStopping() { // 实现插件停止逻辑 } }

截图