using System; using System.Windows.Controls; namespace Ink_Canvas.Helpers.Plugins { /// /// 插件基类,提供基本实现 /// public abstract class PluginBase : IPlugin { /// /// 插件状态(私有字段) /// private bool _isEnabled; /// /// 插件状态(公共属性) /// public bool IsEnabled { get => _isEnabled; protected set { if (_isEnabled != value) { _isEnabled = value; OnEnabledStateChanged(value); } } } /// /// 插件ID /// public string Id { get; protected set; } /// /// 插件路径 /// public string PluginPath { get; set; } /// /// 插件名称 /// public abstract string Name { get; } /// /// 插件描述 /// public abstract string Description { get; } /// /// 插件版本 /// public abstract Version Version { get; } /// /// 插件作者 /// public abstract string Author { get; } /// /// 是否为内置插件 /// public virtual bool IsBuiltIn => false; /// /// 状态变更事件 /// public event EventHandler EnabledStateChanged; /// /// 初始化插件 /// public virtual void Initialize() { Id = GetType().FullName; // 添加日志,记录插件名称 try { string name = Name; LogHelper.WriteLogToFile($"初始化插件: ID={Id}, 名称={name ?? "未命名"}"); if (string.IsNullOrEmpty(name)) { LogHelper.WriteLogToFile($"警告: 插件 {Id} 的名称为空", LogHelper.LogType.Warning); } } catch (Exception ex) { LogHelper.WriteLogToFile($"获取插件名称时出错: {ex.Message}", LogHelper.LogType.Error); } LogHelper.WriteLogToFile($"插件 {Name} 已初始化"); } /// /// 启用插件 /// public virtual void Enable() { if (!IsEnabled) { IsEnabled = true; LogHelper.WriteLogToFile($"插件 {Name} 已启用"); } } /// /// 禁用插件 /// public virtual void Disable() { if (IsEnabled) { IsEnabled = false; LogHelper.WriteLogToFile($"插件 {Name} 已禁用"); } } /// /// 获取插件设置界面 /// /// 插件设置界面 public virtual UserControl GetSettingsView() { // 默认返回空设置页面 return new UserControl(); } /// /// 插件卸载时的清理工作 /// public virtual void Cleanup() { LogHelper.WriteLogToFile($"插件 {Name} 已卸载"); } /// /// 保存插件自身的设置 /// 注意:此方法仅用于保存插件的特定设置,不应影响插件启用/禁用状态 /// 插件启用状态由PluginManager统一管理 /// public virtual void SavePluginSettings() { // 默认实现不做任何事情 // 子类可以重写此方法,将自身设置保存到配置文件中 LogHelper.WriteLogToFile($"插件 {Name} 设置已保存", LogHelper.LogType.Event); } /// /// 触发状态变更事件 /// /// 是否启用 protected virtual void OnEnabledStateChanged(bool isEnabled) { EnabledStateChanged?.Invoke(this, isEnabled); } } }