From 762568894b3c63da00a6fdb567fa753d7164a8ee Mon Sep 17 00:00:00 2001 From: liuwei Date: Thu, 20 Mar 2025 11:51:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin_common/plugin_manager.py | 27 ++++++++++++++++++++++++++- plugins/plugin_manager/main.py | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/plugin_common/plugin_manager.py b/plugin_common/plugin_manager.py index c33bab9..2b37a15 100644 --- a/plugin_common/plugin_manager.py +++ b/plugin_common/plugin_manager.py @@ -13,7 +13,32 @@ from plugin_common.event_system import EventSystem, EventType class PluginManager: - """插件管理器,负责插件的加载、初始化、启动、停止和卸载""" + """插件管理器,负责加载、卸载、启动、停止插件""" + + # 单例实例 + _instance = None + + @classmethod + def get_instance(cls, plugin_dir=None): + """获取单例实例 + + Args: + plugin_dir: 插件目录,如果已有实例则忽略此参数 + + Returns: + PluginManager实例 + """ + if cls._instance is None: + cls._instance = cls(plugin_dir=plugin_dir or "plugins") + return cls._instance + + def __new__(cls, *args, **kwargs): + """实现单例模式""" + if cls._instance is None: + cls._instance = super(PluginManager, cls).__new__(cls) + cls._instance._initialized = False + return cls._instance + def __init__(self, plugin_dir: str = "plugins"): """ diff --git a/plugins/plugin_manager/main.py b/plugins/plugin_manager/main.py index 350c6b3..d0263a7 100644 --- a/plugins/plugin_manager/main.py +++ b/plugins/plugin_manager/main.py @@ -76,7 +76,7 @@ class PluginManagerPlugin(MessagePluginInterface): return False # 创建插件管理器实例 - self.plugin_manager = PluginManager() + self.plugin_manager = PluginManager().get_instance() # 设置系统上下文 self.plugin_manager.set_system_context(context)