天下大吉 發表於 2024-10-31 10:48:00

推荐一个 ASP.NET Core 的轻量级插件框架

<h2><span class="content" style="font-size: 16px">前言</span></h2>
<p><span style="font-size: 16px">本文将介绍一个专为ASP.NET Core设计的轻量级插件框架——PluginCore,该框架不仅能够简化插件的开发与集成,还能大幅提高开发效率。</span></p>
<p><span style="font-size: 16px">另外,还将简要介绍相关的前端技术和SDK支持,帮助我们快速上手。</span></p>
<h2><span class="content" style="font-size: 16px">项目介绍</span></h2>
<p><span style="font-size: 16px">PluginCore是一个轻量级插件框架,通过最小化的配置简化插件的集成与管理,能够快速上手并专注于核心业务逻辑的开发。</span></p>
<p><span style="font-size: 16px">该框架支持动态WebAPI、插件隔离与共享、前后端分离以及热插拔等特性,非常适合需要高度模块化与可扩展性的应用场景。</span></p>
<p><span style="font-size: 16px"><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031103800459-767172164.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></span></p>
<h2><span class="content" style="font-size: 16px">项目特点</span></h2>
<ul>
<li><span style="font-size: 16px">简单易用:遵循“约定优于配置”的原则,最大限度减少配置需求,让您专注于核心业务逻辑。</span></li>
<li><span style="font-size: 16px">开箱即用:前端与后端自动集成,只需几行代码即可完成整个集成流程。</span></li>
<li><span style="font-size: 16px">动态WebAPI:每个插件都可以添加新的Controller,拥有独立的路由配置。</span></li>
<li><span style="font-size: 16px">插件隔离与共享:提供完善的插件隔离机制,并支持类型共享。</span></li>
<li><span style="font-size: 16px">前后端分离:允许在插件的wwwroot文件夹中放置前端资源文件,直接通过插件ID访问。</span></li>
<li><span style="font-size: 16px">热插拔:支持在不停机的情况下上传、安装、启用、禁用、卸载和删除插件;甚至可以在运行时动态添加HTTP请求中间件。</span></li>
<li><span style="font-size: 16px">依赖注入:在实现IPlugin接口的插件类构造函数中支持DI。</span></li>
<li><span style="font-size: 16px">模块化:所有过程均模块化处理,并全面支持DI,便于替换和自定义插件机制。</span></li>
<li><span style="font-size: 16px">易扩展:支持编写插件SDK和扩展插件,提供自定义插件钩子。</span></li>
<li><span style="font-size: 16px">插件依赖树:声明式的依赖关系,自动根据依赖关系确定加载顺序。</span></li>
<li><span style="font-size: 16px">生命周期管理:可控的插件生命周期,包括事件分发机制。</span></li>
<li><span style="font-size: 16px">前端挂件:可在前端定义扩展点,并通过插件注入挂件,支持HTML/CSS/JavaScript。</span></li>
<li><span style="font-size: 16px">无数据库依赖:完全不需要数据库支持。</span></li>
<li><span style="font-size: 16px">零侵入性:对现有系统几乎没有侵入性。</span></li>
<li><span style="font-size: 16px">极少外部依赖:除用于解压缩的SharpZipLib之外,无其他第三方依赖。</span></li>
</ul>
<h2><span class="content" style="font-size: 16px">项目技术</span></h2>
<ul>
<li><span style="font-size: 16px">后端: .NET Standard, .NET Core, .NET, ASP.NET Core</span></li>
<li><span style="font-size: 16px">前端: Vue.js, vue-i18n, Vue Router, Vuex, Element UI</span></li>
<li><span style="font-size: 16px">前端工具: Babel, Mock.js, SASS, Autoprefixer, ESLint, Axios, NPM</span></li>
</ul>
<h2><span class="content" style="font-size: 16px">项目使用</span></h2>
<p><strong><span style="font-size: 16px">项目结构</span></strong></p>
<div><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031104031866-519536657.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></div>
<p><strong><span class="content" style="font-size: 16px">一分钟集成</span></strong></p>
<p><span style="font-size: 16px">推荐使用NuGet集成,在项目的根目录执行以下命令。</span></p>
<p><span style="font-size: 16px">如果使用的是Visual Studio,可以通过"工具"-&gt;"NuGet包管理器"-&gt;"包管理控制台"来执行安装命令:</span></p>
<div class="cnblogs_code">
<pre>PM&gt; Install-Package PluginCore.AspNetCore</pre>
</div>
<p><span class="content" style="font-size: 16px">在ASP.NET Core项目中集成</span></p>
<p><span style="font-size: 16px">修改Startup.cs文件,添加以下代码:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> PluginCore.AspNetCore.Extensions;

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Startup
{
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> ConfigureServices(IServiceCollection services)
    {
      services.AddControllers();
      services.AddPluginCore(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1. 添加 PluginCore</span>
<span style="color: rgba(0, 0, 0, 1)">    }

    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (env.IsDevelopment())
      {
            app.UseDeveloperExceptionPage();
      }

      app.UseHttpsRedirection();
      app.UseRouting();
      
      app.UsePluginCore(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2. 使用 PluginCore</span>
<span style="color: rgba(0, 0, 0, 1)">      
      app.UseAuthorization();
      app.UseEndpoints(endpoints </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> { endpoints.MapControllers(); });
    }
}</span></pre>
</div>
<p><span style="font-size: 16px">完成后,访问https://localhost:5001/PluginCore/Admin即可进入PluginCore管理界面。(请将URL替换为您实际的地址)</span></p>
<p><strong><span class="content" style="font-size: 16px">注意</span></strong></p>
<p><span style="font-size: 16px">请登录PluginCore管理界面后,及时更改默认的用户名和密码:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: {
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Password</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ABC12345</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    },
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FrontendMode</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">LocalEmbedded</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">RemoteFrontend</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://cdn.jsdelivr.net/gh/yiyungent/plugincore-admin-frontend@0.1.2/dist-cdn</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p><span style="font-size: 16px">更改后立即生效,无需重启站点,但需要重新登录PluginCore管理界面。</span></p>
<p><strong><span class="content" style="font-size: 16px">Docker体验</span></strong></p>
<p><span style="font-size: 16px">如果希望通过Docker体验PluginCore,可以使用以下命令:</span></p>
<div class="cnblogs_code">
<pre>docker run -d -p <span style="color: rgba(128, 0, 128, 1)">5004</span>:<span style="color: rgba(128, 0, 128, 1)">80</span> -e ASPNETCORE_URLS=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://*:80</span><span style="color: rgba(128, 0, 0, 1)">"</span> --name plugincore-aspnetcore3-<span style="color: rgba(128, 0, 128, 1)">1</span> yiyungent/plugincore-aspnetcore3-<span style="color: rgba(128, 0, 128, 1)">1</span></pre>
</div>
<p><span style="font-size: 16px">访问 https://localhost:5001/PluginCore/Admin 进入 PluginCore 管理界面(注意将端口替换为你的实际端口)</span></p>
<h2><span class="content" style="font-size: 16px">项目效果</span></h2>
<p><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031104447287-1407917848.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031104528475-1968046447.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031104608223-2104537814.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031104628423-1482523216.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p><img src="https://img2024.cnblogs.com/blog/576536/202410/576536-20241031104650463-1400921176.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2><span class="content" style="font-size: 16px">项目应用实例</span></h2>
<p><strong><span class="content" style="font-size: 16px">1、yiyungent/KnifeHub</span></strong></p>
<p><span style="font-size: 16px">【PluginCore.AspNetCore 最佳实践】工具平台,涵盖日常生活、学习、工作及开发所需的各类工具集。</span></p>
<p><span style="font-size: 16px">https://github.com/yiyungent/KnifeHub</span></p>
<p><strong><span class="content" style="font-size: 16px">2、yiyungent/Dragonfly</span></strong></p>
<p><span style="font-size: 16px">利用ASP.NET Core与Selenium实现的Web自动化解决方案。</span></p>
<p><span style="font-size: 16px">https://github.com/yiyungent/Dragonfly</span></p>
<h2><span class="content" style="font-size: 16px">项目地址</span></h2>
<p><span style="font-size: 16px"><strong>GitHub:</strong>https://github.com/yiyungent/PluginCore</span></p>
<p><span style="font-size: 16px"><strong>在线文档:</strong>https://yiyungent.github.io/PluginCore/zh</span></p>
<h2><span class="md-plain md-expand" style="font-size: 16px">最后</span></h2>
<p><span style="font-size: 16px">如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。</span></p>
<p><span style="font-size: 16px">也可以加入微信公众号<strong></strong>&nbsp;社区,与其他热爱技术的同行一起交流心得,共同成长!<strong>优秀是一种习惯,欢迎大家留言学习!</strong></span></p>
<p><span style="font-size: 16px"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240814113403514-910171896.png" alt="" style="display: block; margin-left: auto; margin-right: auto"></span></p><br><br>
来源:https://www.cnblogs.com/1312mn/p/18509007
頁: [1]
查看完整版本: 推荐一个 ASP.NET Core 的轻量级插件框架