插件管理器协调插件启用和配置。它的管理生命周期从平台首次访问/启动时开始,一直持续到平台进程终止。
插件管理器生命周期
当需要初始化或重新初始化时,插件管理器将执行以下过程:
- 如果对启用的插件进行了更改,则会卸载全部刚禁用的可安装插件。
- 在 PluginManager 上触发 BeforeInitialization 事件 ,并且所有事件处理程序都未注册。
- 全部插件都将被卸载(插件管理器对插件的全部引用都将被删除,从而允许垃圾回收器清理插件的旧实例)。
- 全部启用的插件都是逐个实例化的。当它们被实例化时,可翻译的插件赋予翻译,可配置的插件赋予配置。
- 调用全部插件的 Initialize 方法。这是插件注册事件处理程序和与其他插件交互的适当时间。
- AfterInitialization 事件在 PluginManager 上触发,并且所有事件处理程序都已注册。
- 将安装任何刚启用或刚升级的可安装插件。
在重新加载插件时,平台利用分布式锁,确保一次只有一个平台实例(存在于每个Web节点和每个作业服务器节点上)执行插件重载。这可确保一次性操作(例如安装)仅对每个站点实例发生一次,而不是每个平台实例发生一次。
插件生命周期
从单个插件的角度来看,生命周期显示为
插件的位置
- 实例化。当插件管理器初始化或重新初始化插件时,将创建插件的新实例。
- 翻译。 可翻译的插件赋予翻译。
- 配置。 可配置的插件赋予配置。
- 初始化。所有插件都需要初始化。这是对进程 API 注册事件处理程序或通过 PluginManager 引用其他插件的适当时机.
- 安装。 如果以前未安装插件或以前安装过早期/更高版本,则会调用可安装插件的 Install 方法。
- 执行。允许所有插件正常执行。此时,平台将与特殊用途的插件进行交互,并且每当其注册事件触发时,插件都会收到通知。
- 释放。当插件管理器重新初始化时,它会删除对现有插件的全部引用,并允许 .NET 垃圾回收器清理未引用的插件。如果插件是可安装的并且刚刚被禁用,则将调用它的 Uninstall 方法。