Skip to content

Plugin Framework

The Plugin infrastructure provides a complete system for extending applications with dynamically loaded modules, including discovery, loading, lifecycle management, UI integration, and inter-plugin communication.

Overview

  • Dynamic Loading — Load plugins from DLLs at runtime with dependency isolation
  • Component Discovery — Automatic discovery of menu and panel components
  • Lifecycle Management — Enable/disable/remove plugins at runtime
  • State Management — Both transient (in-memory) and persistent storage
  • Message Bus Integration — Inter-plugin and plugin-host communication
  • Asset Loading — Dynamic CSS/JS injection
  • Platform Support — Desktop (dynamic) and WebAssembly (static reference)

Quick Start

1. Add Plugin Framework Services

csharp
builder.Services.AddPluginFramework();

2. Load Plugins

csharp
// From a directory (Desktop)
app.Services.UsePlugins("plugins");

// From a referenced assembly (WebAssembly)
app.Services.UsePlugin(typeof(MyPlugin.PluginManifest).Assembly);

3. Create a Plugin

csharp
// PluginManifest.cs
public class MyPluginManifest : IPluginManifest
{
    public string Id => "com.example.myplugin";
    public string Name => "My Plugin";
    public Version Version => new(1, 0, 0);
    public string Developer => "Example Corp";
    public string Description => "Does something useful";
}

Architecture

┌─────────────────────┐
│   Host Application  │
├─────────────────────┤
│    PluginState      │◀──── Manages all loaded plugins
│    PluginLoader     │◀──── Discovers & loads from assemblies
│    PluginContext    │◀──── Services injected into plugins
└──────────┬──────────┘


┌─────────────────────┐     ┌─────────────────────┐
│  Plugin Assembly A  │     │  Plugin Assembly B  │
├─────────────────────┤     ├─────────────────────┤
│  IPluginManifest    │     │  IPluginManifest    │
│  PluginMenu(s)      │     │  PluginContextPanel │
│  PluginContextPanel │     │  IConsumer<T>       │
└─────────────────────┘     └─────────────────────┘

Core Components

ComponentDescription
IPluginManifestRequired interface defining plugin metadata
PluginStateSingleton managing all loaded plugins
PluginLoaderDiscovers and loads plugins from assemblies
PluginContextServices and utilities injected into plugin components
PluginComponentBaseBase class for plugin Blazor components
PluginMenuBase class for menu-based plugin UI
PluginContextPanelBase class for side-panel plugin UI
PluginGuardError boundary wrapping plugin components

Topics