<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle</link><description /><dc:language>en-US</dc:language><generator>14.0.0.586 14</generator><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle</link><pubDate>Wed, 05 Aug 2020 14:18:33 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Current Revision posted to Developer Training by Former Member on 08/05/2020 14:18:33&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;span&gt;[[api-documentation:IApiDefinition Plugin Type|Apis]]&amp;nbsp;&lt;/span&gt;are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any &lt;span&gt;[[Executing Code Before Plugin Initialization|IBeforeInitialization]]&lt;/span&gt;&amp;nbsp;execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom&amp;nbsp;&lt;span&gt;[[api-documentation:IApiDefinition Plugin Type|Apis]]&lt;/span&gt;&amp;nbsp;are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/9</link><pubDate>Wed, 05 Aug 2020 14:17:38 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 9 posted to Developer Training by Former Member on 08/05/2020 14:17:38&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;span&gt;[[api-documentation:IApiDefinition Plugin Type|Apis]]&amp;nbsp;&lt;/span&gt;&lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:IBeforeInitializationPlugin&amp;nbsp;&lt;/span&gt;Plugin Type|BeforeInitialization plugins]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom&amp;nbsp;&lt;span&gt;[[api-documentation:IApiDefinition Plugin Type|Apis]]&lt;/span&gt;&amp;nbsp;are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/8</link><pubDate>Wed, 05 Aug 2020 14:17:09 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 8 posted to Developer Training by Former Member on 08/05/2020 14:17:09&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:IBeforeInitializationPlugin&amp;nbsp;&lt;/span&gt;Plugin Type|BeforeInitialization plugins]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom&amp;nbsp;&lt;span&gt;[[api-documentation:IApiDefinition Plugin Type|Apis]]&lt;/span&gt;&amp;nbsp;&lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/7</link><pubDate>Wed, 05 Aug 2020 14:16:25 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 7 posted to Developer Training by Former Member on 08/05/2020 14:16:25&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:IBeforeInitializationPlugin&amp;nbsp;&lt;/span&gt;Plugin Type|BeforeInitialization plugins]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom&amp;nbsp;&lt;span&gt;[[api-documentation:IConfigurablePlugin Plugin Type|Apis]]&lt;/span&gt;&amp;nbsp;&lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/6</link><pubDate>Wed, 05 Aug 2020 14:15:43 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 6 posted to Developer Training by Former Member on 08/05/2020 14:15:43&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:IBeforeInitializationPlugin&amp;nbsp;&lt;/span&gt;Plugin Type|BeforeInitialization plugins]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/5</link><pubDate>Wed, 05 Aug 2020 14:12:33 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 5 posted to Developer Training by Former Member on 08/05/2020 14:12:33&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:IConfigurablePlugin&amp;nbsp;&lt;/span&gt;Plugin Type|Before Plugin Initialization plugins]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/4</link><pubDate>Tue, 04 Aug 2020 22:06:50 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 4 posted to Developer Training by Former Member on 08/04/2020 22:06:50&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:&lt;/span&gt;IBeforeInitializationPlugin Plugin Type|Before Plugin Initialization plugins]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/3</link><pubDate>Tue, 04 Aug 2020 22:05:22 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 3 posted to Developer Training by Former Member on 08/04/2020 22:05:22&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:&lt;/span&gt;IBeforeInitializationPlugin Plugin Type|Executing Code Before Plugin Initialization]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/2</link><pubDate>Tue, 04 Aug 2020 22:04:02 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 2 posted to Developer Training by Former Member on 08/04/2020 22:04:02&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img alt=" " src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[&lt;span&gt;api-documentation:&lt;/span&gt;IBeforeInitialization Plugin Type|Executing Code Before Plugin Initialization]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Plugin Lifecycle</title><link>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle/revision/1</link><pubDate>Thu, 13 Jun 2019 19:29:08 GMT</pubDate><guid isPermaLink="false">3c7a0621-53d3-4b0b-8ed7-17d0f7447de7</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65127/plugin-lifecycle#comments</comments><description>Revision 1 posted to Developer Training by Ben Tiedt on 06/13/2019 19:29:08&lt;br /&gt;
&lt;p&gt;The [[api-documentation:PluginManager In-Process API Service|plugin manager]] orchestrates [[api-documentation:IPlugin Plugin Type|plugin]] enablement and configuration. It&amp;#39;s management lifecycle begins when the platform is first accessed/started and continues until the platform process is terminated.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Manager_Lifecycle" name="Plugin_Manager_Lifecycle"&gt;&lt;/a&gt;Plugin Manager Lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png"&gt;&lt;img src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/PluginManager-lifecycle_2D00_1.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;When initialization or re-initialization is required, the [[api-documentation:PluginManager In-Process API Service|plugin manager]] executes the following process:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If changes were made to enabled plugins, any newly disabled [[api-documentation:PluginManager In-Process API Service|installable plugins]] are uninstalled.&lt;/li&gt;
&lt;li&gt;The BeforeInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;All [[api-documentation:IPlugin Plugin Type|plugins]] are unloaded (all Plugin Manager references to plugins are removed, allowing the old instances of plugins to be cleaned up by the garbage collector).&lt;/li&gt;
&lt;li&gt;All enabled plugins are instantiated one-by-one. &amp;nbsp;As they are instantiated, [[api-documentation:ITranslatablePlugin Plugin Type|translatable plugins]] are given their translations and [[api-documentation:IConfigurablePlugin Plugin Type|configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[Executing Code Before Plugin Initialization|IBeforeInitialization]] plugins execute.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;All plugins&amp;#39; Initialize() methods are called. &amp;nbsp;This is an appropriate time for plugins to register event handlers and interact with other plugins.&lt;/li&gt;
&lt;li&gt;The AfterInitialization event is fired on [[api-documentation:PluginManager In-Process API Service|PluginManager]] and all event handlers are unregistered.&lt;/li&gt;
&lt;li&gt;Any newly enabled or newly upgraded [[api-documentation:IInstallablePlugin Plugin Type|installable plugins]] are installed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;While plugins are being reloaded (the majority of the flowchart above), the platform utilizes a distributed lock, ensuring that only one instance of the platform (which exists on each web node and each job server node) performs a plugin reload at a time. This ensures that one time processes, for example, installation, only occur once per site instance and not once per platform instance.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Plugin_Lifecycle" name="Plugin_Lifecycle"&gt;&lt;/a&gt;Plugin Lifecycle&lt;/h2&gt;
&lt;p&gt;From the perspective of a single plugin, the lifecycle appears as&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png"&gt;&lt;img src="/resized-image/__size/1040x0/__key/communityserver-wikis-components-files/00-00-00-12-83/Plugin-lifecycle_2D00_1.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where the [[api-documentation:IPlugin Plugin Type|plugin]] is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instantiated. A new instance of the [[api-documentation:IPlugin Plugin Type|plugin]] is created when [[api-documentation:PluginManager In-Process API Service|the plugin manager]] initializes or re-initializes plugins.&lt;/li&gt;
&lt;li&gt;Translated. [[api-documentation:ITranslatablePlugin Plugin Type|Translatable plugins]] are given their translations.&lt;/li&gt;
&lt;li&gt;Configured. [[api-documentation:IConfigurablePlugin Plugin Type|Configurable plugins]] are given their configuration.&lt;/li&gt;
&lt;li&gt;Any [[IBeforeInitialization|Executing Code Before Plugin Initialization]] execute their BeforeInitialization(...) logic.&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;platform and custom &lt;a href="/developers/w/developer90/50246/iapidefinition-plugin-type"&gt;Apis&lt;/a&gt; are registered.&lt;/li&gt;
&lt;li&gt;Initialized. All plugins are initialized. This is an appropriate time to register event handlers&amp;nbsp;against &lt;a class="ExistingPageLink" title="Click to view the page titled: In-Process API Documentation" href="/developers/w/developer85/45939.in-process-api-documentation"&gt;the in-process API&lt;/a&gt; or reference other plugins via [[api-documentation:PluginManager In-Process API Service|PluginManager]].&lt;/li&gt;
&lt;li&gt;Installed. [[api-documentation:IInstallablePlugin Plugin Type|Installable plugins&amp;#39;]] &lt;code&gt;Install()&lt;/code&gt; methods are called if the plugin was not previously installed or an earlier/later version was previously installed.&lt;/li&gt;
&lt;li&gt;Executed. All plugins are allowed to execute normally. At this time, the platform will interact with&amp;nbsp;[[api-documentation:Plugin API Documentation|special-use plugins]] and plugins will be notified whenever their registered events fire.&lt;/li&gt;
&lt;li&gt;Destroyed. When [[api-documentation:PluginManager In-Process API Service|the plugin manager]] re-initializes, it removes all references to existing plugins and allows the .net garbage collector to clean up unreferenced plugins. If the plugin is [[api-documentation:IInstallablePlugin Plugin Type|installable]] and was newly disabled, it&amp;#39;s &lt;code&gt;Uninstall()&lt;/code&gt; method will be called.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>