SimplePlugin.Abstractions
1.0.2
dotnet add package SimplePlugin.Abstractions --version 1.0.2
NuGet\Install-Package SimplePlugin.Abstractions -Version 1.0.2
<PackageReference Include="SimplePlugin.Abstractions" Version="1.0.2" />
<PackageVersion Include="SimplePlugin.Abstractions" Version="1.0.2" />
<PackageReference Include="SimplePlugin.Abstractions" />
paket add SimplePlugin.Abstractions --version 1.0.2
#r "nuget: SimplePlugin.Abstractions, 1.0.2"
#:package SimplePlugin.Abstractions@1.0.2
#addin nuget:?package=SimplePlugin.Abstractions&version=1.0.2
#tool nuget:?package=SimplePlugin.Abstractions&version=1.0.2
SimplePlugin
A lightweight plugin discovery system for .NET that uses Roslyn source generators. No reflection, no runtime scanning instead compile-time code generation that finds your plugins and wires them up automatically.
How it works
SimplePlugin ships two packages: a core library (SimplePlugin) and a source generator (SimplePlugin.Generator).
At build time, the generator scans your project and its references for any public, non-abstract class that:
- Implements
IPluginModule - Is decorated with
[PluginModule] - Has a parameterless constructor
It then generates a static PluginRegistry class with a GetAllModules() method that returns instances of every discovered plugin. No reflection involved. it's all baked in at compile time.
Getting started
1. Define your plugin interface
Create an interface that extends IPluginModule with whatever contract your plugins need:
using SimplePlugin;
public interface IGreeterPlugin : IPluginModule
{
string Name { get; }
void Greet();
}
2. Implement a plugin
In a separate project (or the same one), create a class that implements your interface and tag it with [PluginModule]:
using SimplePlugin;
[PluginModule]
public class HelloPlugin : IGreeterPlugin
{
public string Name => "Hello Plugin";
public void Greet() => Console.WriteLine("Hello from a plugin!");
}
3. Discover and use plugins
In your host application, reference both the plugin project and the SimplePlugin.Generator as an analyzer. Then call the generated registry:
using SimplePlugin.Generated;
foreach (var plugin in PluginRegistry.GetAllModules().OfType<IGreeterPlugin>())
{
Console.WriteLine(plugin.Name);
plugin.Greet();
}
Requirements
- .NET 10+
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.