一、前言 在2.0的架構設計中,引入了插件的概念,目的就是為瞭解決代碼臃腫問題,隨著系統功能越來越多,System層的代碼也越來越多,之前是以文件夾的方式區分功能模塊,這樣的話代碼就過於集中,想找到某一個功能模塊的代碼就要翻好幾個文件夾,不利於以後的開發和維護。所以在新的架構中,我將部分功能模塊通過 ...
一、前言
在2.0的架構設計中,引入了插件
的概念,目的就是為瞭解決代碼臃腫問題,隨著系統功能越來越多,System
層的代碼也越來越多,之前是以文件夾的方式區分功能模塊,這樣的話代碼就過於集中,想找到某一個功能模塊的代碼就要翻好幾個文件夾,不利於以後的開發和維護。所以在新的架構中,我將部分功能模塊通過插件的方式提取出來,封裝成類庫形式的插件,這樣System
層如果需要哪個功能,就直接引用該功能模塊的插件,我們調試代碼中遇到問題也直接可以去對應功能模塊的插件項目中查看代碼並調試,非常方便。
二、插件說明
2.1核心插件
2.1.1 SimpleAdmin.Plugin.Core
插件核心,被其他插件所引用,類似SimplAdmin.Core層
,存放一些公共的特性,常量,枚舉,介面等。
2.1.2 SimpleAdmin.Plugin.SqlSugar
SqlSugar插件,集成了SqlSugar的單例模式,資料庫實體和一些常量我也移了過來,之前是放在核心層,但是我覺得提取出來的話後面找資料庫相關的功能和配置就直接到SqlSugar插件找,非常方便。
2.1.3 SimpleAdmin.Plugin.CodeFirst
CodeFirst數據遷移插件,如果需要資料庫初始化和種子數據的生成,則引用該插件。
2.1.4 SimpleAdmin.Plugin.Cache
緩存插件,支持MemeryCache和Redis二選一,預設使用MemeryCache。
2.1.5 SimpleAdmin.Plugin.Aop
Aop插件,如果需要Aop功能,則可以使用該插件。
2.2系統模塊
2.2.1 SimpleAdmin.Plugin.Mqtt
Mqtt插件,集成mqtt客戶端功能,如果需要使用mqtt功能則可以引用該插件,支持和SignalR
插件並存。
2.2.2 SimpleAdmin.Plugin.SignalR
SignalR插件,主要用於及時通訊和消息通知,系統預設消息通知使用的是Signalr,當然也可以切換成mqtt,可以和mqtt插件並存。
2.2.3 SimpleAdmin.Plugin.ImportExport
導入導出插件,繼承了數據導入導出功能,使用的Magicodes.IE.Excel
實現的
2.2.4 SimpleAdmin.Plugin.Gen
代碼生成插件,集成了代碼生成器功能,跟其他插件不同的是該插件引用System
層而不是被System
層引用。
2.2.5 SimpleAdmin.Plugin.Batch
批量編輯插件,集成了批量編輯功能。
三、如何新建插件
新建類庫
項目,輸入項目名稱和項目位置,命名規則為SimpleAdmin.Plugin.XXX
,註意項目位置要在SimpleAdmin.Plugin
文件夾。
雙擊新建的插件,修改PropertyGroup
里得內容,這裡的DocumentationFile
改成自己的插件名稱。
<PropertyGroup>
<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
<NoWarn>1701;1702;8616;1591;8618;8629;8602;8603;8604;8625;8765</NoWarn>
<DocumentationFile>SimpleAdmin.Plugin.Test.xml</DocumentationFile>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
vs應該會提示重新載入項目,選擇重新載入項目,並引用SimpleAdmin.Plugin.Core
插件。
創建GlobalUsing.cs
文件,用於全局引用。
global using Furion;
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.Extensions.DependencyInjection;
global using SimpleAdmin.Plugin.Core;
新建startup.cs類,在 Furion
框架中,提供了更為靈活的 Startup
類配置方式,無需在 Web 啟用層
中配置,可將配置放到任何項目層。詳情可以查看Furion文檔 https://furion.baiqian.ltd/docs/appstartup
/// <summary>
/// AppStartup啟動類
/// </summary>
public class Startup : AppStartup
{
/// <summary>
/// ConfigureServices中不能解析服務,比如App.GetService(),尤其是不能在ConfigureServices中獲取諸如緩存等數據進行初始化,應該在Configure中進行
/// 服務都還沒初始化完成,會導致記憶體中存在多份 IOC 容器!!
/// 正確應該在 Configure 中,這個時候服務(IServiceCollection 已經完成 BuildServiceProvider() 操作了
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine("註冊Test插件");
//serviec.AddXXX();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
通過startup的方式,你只要引用了插件,則系統啟動之後會自動調用裡面的ConfigureServices
和Configure
。如果你想你的插件可以通過配置文件選擇啟用或者不啟用,那麼你應該創建一個Component
類,可以參考MQTT
組件和Furion文檔https://furion.baiqian.ltd/docs/component
namespace SimpleAdmin.Plugin.Test;
/// <summary>
/// Test組件
/// </summary>
public sealed class TestComponent : IServiceComponent
{
/// <summary>
/// ConfigureServices中不能解析服務,比如App.GetService(),尤其是不能在ConfigureServices中獲取諸如緩存等數據進行初始化,應該在Configure中進行
/// 服務都還沒初始化完成,會導致記憶體中存在多份 IOC 容器!!
/// 正確應該在 Configure 中,這個時候服務(IServiceCollection 已經完成 BuildServiceProvider() 操作了
/// </summary>
/// <param name="services"></param>
public void Load(IServiceCollection services, ComponentContext componentContext)
{
Console.WriteLine("註冊Test插件");
}
}
/// <summary>
/// Test組件
/// 模擬 Configure
/// </summary>
public sealed class TestApplicationComponent : IApplicationComponent
{
public void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext)
{
}
}
System
層引用新建的插件,如果你的插件是像代碼生成插件一樣引用了System
層,則要Web.Core
層引用才行。
啟動項目,可以看到插件啟動了,剩下的就是自己寫插件功能了。
本文來自博客園,作者:HuTiger,轉載請註明原文鏈接:https://www.cnblogs.com/huguodong/p/17294128.html,歡迎加入qq群927460240學習討論