From 79ee72f500f21ad241d3d2c14a433f4035c194f0 Mon Sep 17 00:00:00 2001 From: sharworange Date: Sat, 28 Feb 2026 18:09:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=92=E4=BB=B6=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=20Plugins=20=E4=B8=BA=20plugins=20&&=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=92=E4=BB=B6=E4=B8=93=E5=B1=9E=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modules/PluginManagement/PluginLoader.cs | 6 +++--- Modules/Services/ServiceRegistration.cs | 23 +++++++++++++++++++++++ appsettings.json | 2 +- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Modules/PluginManagement/PluginLoader.cs b/Modules/PluginManagement/PluginLoader.cs index a0f37de..858cca9 100644 --- a/Modules/PluginManagement/PluginLoader.cs +++ b/Modules/PluginManagement/PluginLoader.cs @@ -6,7 +6,7 @@ namespace sharwapi.Core.Modules.PluginManagement; /// /// 插件加载器 -/// 负责从 Plugins 目录加载实现了 IApiPlugin 的程序集 +/// 负责从 plugins 目录加载实现了 IApiPlugin 的程序集 /// public class PluginLoader { @@ -33,7 +33,7 @@ public List LoadPlugins() var loadedPlugins = new List(); // 获取插件目录路径 - string pluginsPath = Path.Combine(AppContext.BaseDirectory, "Plugins"); + string pluginsPath = Path.Combine(AppContext.BaseDirectory, "plugins"); // 检查插件目录是否存在,如果不存在则创建 if (!Directory.Exists(pluginsPath)) @@ -50,7 +50,7 @@ public List LoadPlugins() return loadedPlugins; } - // 遍历 Plugins 目录下的所有 DLL 文件 + // 遍历 plugins 目录下的所有 DLL 文件 foreach (var dllPath in Directory.GetFiles(pluginsPath, "*.dll")) { try diff --git a/Modules/Services/ServiceRegistration.cs b/Modules/Services/ServiceRegistration.cs index dbfc0a9..6f41f46 100644 --- a/Modules/Services/ServiceRegistration.cs +++ b/Modules/Services/ServiceRegistration.cs @@ -51,6 +51,9 @@ private void RegisterPluginServices(IApiPlugin plugin, IConfiguration configurat // 确保配置文件存在,如果不存在则从插件的默认配置生成 EnsurePluginConfigFile(plugin, configPath); + // 确保插件专属 data 目录存在 + EnsurePluginDataDirectory(plugin); + // 为插件构建独立的配置对象,支持热重载 var pluginConfig = new ConfigurationBuilder() .AddJsonFile(configPath, optional: true, reloadOnChange: true) @@ -60,6 +63,26 @@ private void RegisterPluginServices(IApiPlugin plugin, IConfiguration configurat plugin.RegisterServices(_services, pluginConfig); } + /// + /// 确保插件专属 data 目录存在 + /// + private void EnsurePluginDataDirectory(IApiPlugin plugin) + { + var dataDir = plugin.DataDirectory; + if (!Directory.Exists(dataDir)) + { + try + { + Directory.CreateDirectory(dataDir); + _logger.LogInformation("Created data directory for plugin {PluginName} at {DataDir}", plugin.Name, dataDir); + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to create data directory for plugin {PluginName} at {DataDir}", plugin.Name, dataDir); + } + } + } + /// /// 确保插件配置文件存在 /// 如果配置文件不存在,从插件的 DefaultConfig 生成默认配置 diff --git a/appsettings.json b/appsettings.json index f7b5ccd..17c73c5 100644 --- a/appsettings.json +++ b/appsettings.json @@ -32,7 +32,7 @@ "Urls": "http://localhost:5000", "ApiInfo": { "Name": "Sharw's API", - "Version": "0.1.0" + "Version": "0.2.2" }, "RouteOverride": { }