推荐一个 ASP.NET Core 的轻量级插件框架
前言
本文将介绍一个专为ASP.NET Core设计的轻量级插件框架——PluginCore,该框架不仅能够简化插件的开发与集成,还能大幅提高开发效率。
另外,还将简要介绍相关的前端技术和SDK支持,帮助我们快速上手。
项目介绍
PluginCore是一个轻量级插件框架,通过最小化的配置简化插件的集成与管理,能够快速上手并专注于核心业务逻辑的开发。
该框架支持动态WebAPI、插件隔离与共享、前后端分离以及热插拔等特性,非常适合需要高度模块化与可扩展性的应用场景。

项目特点
- 简单易用:遵循“约定优于配置”的原则,最大限度减少配置需求,让您专注于核心业务逻辑。
- 开箱即用:前端与后端自动集成,只需几行代码即可完成整个集成流程。
- 动态WebAPI:每个插件都可以添加新的Controller,拥有独立的路由配置。
- 插件隔离与共享:提供完善的插件隔离机制,并支持类型共享。
- 前后端分离:允许在插件的wwwroot文件夹中放置前端资源文件,直接通过插件ID访问。
- 热插拔:支持在不停机的情况下上传、安装、启用、禁用、卸载和删除插件;甚至可以在运行时动态添加HTTP请求中间件。
- 依赖注入:在实现IPlugin接口的插件类构造函数中支持DI。
- 模块化:所有过程均模块化处理,并全面支持DI,便于替换和自定义插件机制。
- 易扩展:支持编写插件SDK和扩展插件,提供自定义插件钩子。
- 插件依赖树:声明式的依赖关系,自动根据依赖关系确定加载顺序。
- 生命周期管理:可控的插件生命周期,包括事件分发机制。
- 前端挂件:可在前端定义扩展点,并通过插件注入挂件,支持HTML/CSS/JavaScript。
- 无数据库依赖:完全不需要数据库支持。
- 零侵入性:对现有系统几乎没有侵入性。
- 极少外部依赖:除用于解压缩的SharpZipLib之外,无其他第三方依赖。
项目技术
- 后端: .NET Standard, .NET Core, .NET, ASP.NET Core
- 前端: Vue.js, vue-i18n, Vue Router, Vuex, Element UI
- 前端工具: Babel, Mock.js, SASS, Autoprefixer, ESLint, Axios, NPM
项目使用
项目结构

一分钟集成
推荐使用NuGet集成,在项目的根目录执行以下命令。
如果使用的是Visual Studio,可以通过"工具"->"NuGet包管理器"->"包管理控制台"来执行安装命令:
PM> Install-Package PluginCore.AspNetCore
在ASP.NET Core项目中集成
修改Startup.cs文件,添加以下代码:
using PluginCore.AspNetCore.Extensions; public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddPluginCore(); // 1. 添加 PluginCore
} public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseHttpsRedirection();
app.UseRouting(); app.UsePluginCore(); // 2. 使用 PluginCore app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
完成后,访问https://localhost:5001/PluginCore/Admin即可进入PluginCore管理界面。(请将URL替换为您实际的地址)
注意
请登录PluginCore管理界面后,及时更改默认的用户名和密码:
{
"Admin": {
"UserName": "admin",
"Password": "ABC12345"
},
"FrontendMode": "LocalEmbedded",
"RemoteFrontend": "https://cdn.jsdelivr.net/gh/yiyungent/plugincore-admin-frontend@0.1.2/dist-cdn"
}
更改后立即生效,无需重启站点,但需要重新登录PluginCore管理界面。
Docker体验
如果希望通过Docker体验PluginCore,可以使用以下命令:
docker run -d -p 5004:80 -e ASPNETCORE_URLS="http://*:80" --name plugincore-aspnetcore3-1 yiyungent/plugincore-aspnetcore3-1
访问 https://localhost:5001/PluginCore/Admin 进入 PluginCore 管理界面(注意将端口替换为你的实际端口)
项目效果





项目应用实例
1、yiyungent/KnifeHub
【PluginCore.AspNetCore 最佳实践】工具平台,涵盖日常生活、学习、工作及开发所需的各类工具集。
https://github.com/yiyungent/KnifeHub
2、yiyungent/Dragonfly
利用ASP.NET Core与Selenium实现的Web自动化解决方案。
https://github.com/yiyungent/Dragonfly
项目地址
GitHub:https://github.com/yiyungent/PluginCore
在线文档:https://yiyungent.github.io/PluginCore/zh
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

推荐一个 ASP.NET Core 的轻量级插件框架的更多相关文章
- 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用
标题:从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用. 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1171 ...
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...
- Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群
Kubernetes简介 Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用ApplicationPart动态加载控制器和视图
标题:从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图 作者:Lamond Lu 地址:http://www.cnblogs ...
- 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板
标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件
标题:从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/112 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装
标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11260750. ...
- 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级
标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...
- 从零开始实现ASP.NET Core MVC的插件式开发(七) - 近期问题汇总及部分解决方案
标题:从零开始实现ASP.NET Core MVC的插件式开发(七) - 问题汇总及部分解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/12 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案
标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun ...
随机推荐
- 【导师招募】Apache DolphinScheduler 社区又又又入选开源之夏啦!
很高兴和大家宣布,Apache DolphinScheduler 社区今年再次成功入选入选由中国科学院软件研究所开源软件供应链点亮计划发起的"开源之夏"活动. 入选公示链接:htt ...
- Java IO 流详解
概述 流是一个抽象的概念,代表了数据的无结构化传递.流的本质是数据在不同设备之间的传输.在 Java 中,数据的读取和写入都是以流的方式进行的 在 Java 中,根据数据流向的不同,可以将流分为输入( ...
- 树莓派CM4(一): 镜像烧录
1. 简介 树莓派型号Raspberry Pi CM4 EMMC, 注意是EMMC版本,不是SD卡版本 核心板资源 IO板使用官方IO板Compute module 4 IO Board, 硬件规格 ...
- Linux下如何在程序中获取某个命令执行的结果?【附源码】
在工作中遇到一个问题,就是想获取某个函数执行之后打印的字符串信息. 这个功能应用场景挺多的, 特地整理了一下相关知识点分享给大家. 1. 使用临时文件 1) 使用shell的重定向 将命令输出重定向到 ...
- 卧槽,牛逼!vue3的组件竟然还能“暂停”渲染!
前言 有的时候我们想要从服务端拿到数据后再去渲染一个组件,为了实现这个效果我们目前有几种实现方式: 将数据请求放到父组件去做,并且使用v-if控制拿到子组件后才去渲染子组件,然后将数据从父组件通过pr ...
- 最详细STL(三)list
list就是链表啦,他的一个结点由两个指针域,一个数据域组成.list可以在任何位置以O(n)的复杂度插入元素,头部和尾部的插入的复杂度为O(1).然而list也有一个致命的缺点,因为链表的空间申请是 ...
- python pyqt6 QMainWindow 使用QComboBox 窗口移位
QMainWindow 可拖拽移动,但是点击QComboBox 时,窗口有时会误识别为拖拽移动,导致窗口自动移动位置 在QMainWindow中,新增事件筛选器 # 避免点击QComboBox时,窗 ...
- WebShell流量特征检测_冰蝎篇
80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测. 什么是一句话木马? 1.定义 顾名思义就是执行恶意指 ...
- RuleLinKClient - 再也不担心表达引擎宕机了
原来有这么多时间 六月的那么一天,天气比以往时候都更凉爽,媳妇边收拾桌子,边漫不经心的对我说:你最近好像都没怎么阅读了. 正刷着新闻我,如同被一记响亮的晴空霹雳击中一般,不知所措.是了,最近几月诸事凑 ...
- HEDGE: 通过特征交互检测生成文本分类的层次解释《Generating Hierarchical Explanations on Text Classification via Feature Interaction Detection》(LIME算法、神经网络预测的分层解释CD和ACD、Shapley Value夏普利值、Leave-One-Out留一法、HEDGE)
先来吐个槽:啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,为什么我的导师又嫌我PPT做的很烂,( Ĭ ^ Ĭ ) 论文:Generating Hierarchical Explanations on Text Cl ...