![]() |
VOOZH | about |
dotnet add package DevelApp.RuntimePluggableClassFactory.Interface --version 2.1.0
NuGet\Install-Package DevelApp.RuntimePluggableClassFactory.Interface -Version 2.1.0
<PackageReference Include="DevelApp.RuntimePluggableClassFactory.Interface" Version="2.1.0" />
<PackageVersion Include="DevelApp.RuntimePluggableClassFactory.Interface" Version="2.1.0" />Directory.Packages.props
<PackageReference Include="DevelApp.RuntimePluggableClassFactory.Interface" />Project file
paket add DevelApp.RuntimePluggableClassFactory.Interface --version 2.1.0
#r "nuget: DevelApp.RuntimePluggableClassFactory.Interface, 2.1.0"
#:package DevelApp.RuntimePluggableClassFactory.Interface@2.1.0
#addin nuget:?package=DevelApp.RuntimePluggableClassFactory.Interface&version=2.1.0Install as a Cake Addin
#tool nuget:?package=DevelApp.RuntimePluggableClassFactory.Interface&version=2.1.0Install as a Cake Tool
A comprehensive .NET library for dynamic plugin loading, execution, and management with enhanced stability, type safety, and security features.
This project has been enhanced with a complete Technical Design Specification (TDS) implementation featuring:
See for complete implementation details.
ITypedPluginClass<TInput, TOutput>using DevelApp.RuntimePluggableClassFactory;
using DevelApp.RuntimePluggableClassFactory.FilePlugin;
using DevelApp.RuntimePluggableClassFactory.Security;
// Create plugin loader with security validation
var securityValidator = new DefaultPluginSecurityValidator(PluginSecuritySettings.CreateDefault());
var pluginLoader = new FilePluginLoader<IMyPluginInterface>(pluginDirectory, securityValidator);
var pluginFactory = new PluginClassFactory<IMyPluginInterface>(pluginLoader);
// Load and execute plugins
await pluginFactory.RefreshPluginsAsync();
var plugin = pluginFactory.GetInstance("MyModule", "MyPlugin");
var result = plugin.Execute("input data");
// Cleanup
pluginLoader.UnloadAllPlugins();
// Define strongly-typed input/output
public class MyInput { public string Data { get; set; } }
public class MyOutput { public string Result { get; set; } }
// Create typed plugin factory
var typedFactory = new TypedPluginClassFactory<IMyTypedPlugin, MyInput, MyOutput>(pluginLoader);
// Execute with type safety
var input = new MyInput { Data = "test" };
var result = typedFactory.ExecutePlugin("MyModule", "MyPlugin", input);
if (result.Success)
{
Console.WriteLine($"Result: {result.Data.Result}");
}
public interface IMyPluginInterface : IPluginClass
{
// Custom execution method for this specific interface
string ProcessData(string input);
}
public class MyPlugin : IMyPluginInterface
{
// Implement IPluginClass properties
public IdentifierString Name => "MyPlugin";
public NamespaceString Module => "MyModule";
public string Description => "Example plugin implementation";
public SemanticVersionNumber Version => new SemanticVersionNumber(1, 0, 0);
public string ProcessData(string input)
{
return $"Processed: {input}";
}
}
public interface IMyTypedPlugin : ITypedPluginClass<MyInput, MyOutput>
{
// Inherits both IPluginClass and ITypedPluginClass methods
}
public class MyTypedPlugin : IMyTypedPlugin
{
// Implement IPluginClass properties
public IdentifierString Name => "MyTypedPlugin";
public NamespaceString Module => "MyModule";
public string Description => "Example typed plugin implementation";
public SemanticVersionNumber Version => new SemanticVersionNumber(1, 0, 0);
public PluginExecutionResult<MyOutput> Execute(IPluginExecutionContext context, MyInput input)
{
context?.Logger?.LogInformation($"Processing: {input.Data}");
return PluginExecutionResult<MyOutput>.CreateSuccess(new MyOutput
{
Result = $"Processed: {input.Data}"
});
}
}
The project includes comprehensive testing with 48 tests across 7 categories:
# Run all tests
dotnet test
# Expected: 48 tests passing
// Default security (balanced)
var defaultSettings = PluginSecuritySettings.CreateDefault();
// Strict security (high security)
var strictSettings = PluginSecuritySettings.CreateStrict();
// Permissive security (minimal restrictions)
var permissiveSettings = PluginSecuritySettings.CreatePermissive();
var validator = new DefaultPluginSecurityValidator(strictSettings);
All performance targets are validated by automated tests:
| Metric | Target | Status |
|---|---|---|
| Plugin Discovery | < 5 seconds | ✅ Validated |
| Plugin Instantiation | < 100ms avg | ✅ Validated |
| Plugin Execution | < 10ms avg | ✅ Validated |
| Concurrent Throughput | > 100 exec/sec | ✅ Validated |
| Security Validation | < 500ms avg | ✅ Validated |
| Memory Growth | < 50MB under load | ✅ Validated |
IPluginClass: Basic plugin interfaceITypedPluginClass<TInput, TOutput>: Type-safe plugin interfaceIPluginLoader<T>: Plugin loading interfaceIPluginSecurityValidator: Security validation interfaceIContainerizedPluginOrchestrator (v2.1.0+): Interface for containerized plugin orchestrationThe HybridPluginFactory enables seamless mixing of traditional in-process plugins with containerized plugins loaded from Kubernetes or other remote sources:
using DevelApp.RuntimePluggableClassFactory.Containerized;
using DevelApp.RuntimePluggableClassFactory.Containerized.Interfaces;
// Setup traditional plugin loader
var traditionalLoader = new FilePluginLoader<IMyPlugin>(pluginDirectory, securityValidator);
var traditionalFactory = new PluginClassFactory<IMyPlugin>(traditionalLoader);
// Setup containerized plugin orchestrator (e.g., Kubernetes)
var containerizedOrchestrator = new KubernetesPluginOrchestrator(/* ... */);
// Create hybrid factory
var hybridFactory = new HybridPluginFactory<IMyPlugin>(
traditionalFactory,
containerizedOrchestrator,
logger,
new HybridPluginFactoryOptions
{
PreferContainerized = true,
AutoDeployContainerized = false
});
// Load plugins from either source
var plugin = await hybridFactory.GetPluginAsync(
new NamespaceString("MyCompany.Plugins"),
new IdentifierString("DataProcessor"),
version: new SemanticVersionNumber(1, 0, 0),
executionMode: PluginExecutionMode.Auto);
// List all available plugins
var availablePlugins = await hybridFactory.ListAvailablePluginsAsync();
foreach (var pluginInfo in availablePlugins)
{
Console.WriteLine($"{pluginInfo.ModuleName}.{pluginInfo.PluginName} ({pluginInfo.ExecutionMode})");
}
The following types are now exposed in the public API for implementing custom async module-based plugin loading:
These types enable dynamic module loading from Kubernetes/remote sources as an alternative to traditional directory-based scanning.
# Clone repository
git clone https://github.com/DevelApp-ai/RuntimePluggableClassFactory.git
# Build solution
dotnet build RuntimePluggableClassFactory.sln
# Run tests
dotnet test
This project is licensed under the MIT License - see the LICENSE file for details.
For questions, issues, or support:
TDS Implementation Status: ✅ Complete - All requirements implemented and validated
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 3 NuGet packages that depend on DevelApp.RuntimePluggableClassFactory.Interface:
| Package | Downloads |
|---|---|
|
DevelApp.Workflow.Core
Interfaces for DevelApp.Workflow which is an oppinionated Workflow for Akka.Net making it easy to handle workflows |
|
|
DevelApp.RuntimePluggableClassFactory
A comprehensive .NET library for dynamic plugin loading, execution, and management with enhanced stability, type safety, and security features. Supports dynamic plugin loading/unloading with AssemblyLoadContext, type-safe plugin interfaces, multi-level security validation, and comprehensive error handling. |
|
|
DevelApp.Minotaur
A zero-copy cognitive graph unparser framework with StepParser integration, extensible plugin system, and advanced location tracking capabilities. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.1.0 | 318 | 11/4/2025 |
| 2.0.12 | 267 | 11/3/2025 |
| 2.0.11 | 250 | 11/2/2025 |
| 2.0.10 | 266 | 10/29/2025 |
| 2.0.9 | 243 | 10/27/2025 |
| 2.0.8 | 237 | 10/27/2025 |
| 2.0.7 | 247 | 10/26/2025 |
| 2.0.6 | 243 | 10/26/2025 |
| 2.0.5 | 222 | 10/26/2025 |
| 2.0.4 | 225 | 10/26/2025 |
| 2.0.3 | 245 | 10/26/2025 |
| 2.0.2 | 241 | 10/26/2025 |
| 2.0.1 | 4,966 | 8/20/2025 |
| 2.0.1-ci0028 | 221 | 8/20/2025 |
| 2.0.1-ci0006 | 225 | 8/20/2025 |
| 2.0.0 | 215 | 8/17/2025 |
| 1.0.7 | 1,094 | 11/21/2021 |
| 1.0.6 | 748 | 12/23/2020 |
| 1.0.4 | 1,789 | 12/22/2020 |
| 1.0.2 | 3,353 | 11/8/2020 |
TDS Implementation Complete:
- Added ITypedPluginClass<TInput, TOutput> for type-safe plugin development
- IPluginExecutionContext with logging, cancellation, and properties support
- PluginExecutionResult<T> for strongly-typed execution results
- Backward compatible with existing IPluginClass implementations
- Enhanced plugin metadata and versioning support