Slotly.Core
10.0.2
dotnet add package Slotly.Core --version 10.0.2
NuGet\Install-Package Slotly.Core -Version 10.0.2
<PackageReference Include="Slotly.Core" Version="10.0.2" />
<PackageVersion Include="Slotly.Core" Version="10.0.2" />
<PackageReference Include="Slotly.Core" />
paket add Slotly.Core --version 10.0.2
#r "nuget: Slotly.Core, 10.0.2"
#:package Slotly.Core@10.0.2
#addin nuget:?package=Slotly.Core&version=10.0.2
#tool nuget:?package=Slotly.Core&version=10.0.2
Slotly.Core
Core types and abstractions for the Slotly plugin framework.
Part of the Slotly plugin framework.
Features
- IPlugin interface with explicit lifecycle methods (
OnLoad,OnUnload,OnEnable,OnDisable) - IPluginManifest for declaring plugin identity and dependencies
- IPluginContext providing host services and configuration to plugins
- PluginState enum modeling the full plugin lifecycle (Unloaded, Loaded, Enabled, Disabled, Faulted)
- PluginError base type with exhaustive
Matchfor compile-time-safe error handling - Result-based API throughout -- no exceptions, explicit error paths via Rustly
Result<T, E>
Installation
dotnet add package Slotly.Core
Usage
Implement IPlugin to create a plugin with explicit lifecycle handling:
using Slotly;
using Slotly.Abstractions;
using Slotly.Errors.Abstractions;
public class GreeterPlugin : IPlugin
{
public string Id => "com.example.greeter";
public string Name => "Greeter";
public string Version => "1.0.0";
public Result<Unit, PluginError> OnLoad(IPluginContext context)
{
// Access host services through the context
var logger = context.GetService<ILogger>();
logger.Match(
some: log => { log.Info("Greeter loaded"); return Unit.Value; },
none: () => Unit.Value);
return Unit.Value;
}
public Result<Unit, PluginError> OnUnload() => Unit.Value;
public Result<Unit, PluginError> OnEnable() => Unit.Value;
public Result<Unit, PluginError> OnDisable() => Unit.Value;
}
Use exhaustive error matching to handle every error variant at compile time:
Result<Unit, PluginError> result = plugin.OnLoad(context);
string message = result.UnwrapErr().Match(
manifestNotFound: e => $"Manifest missing: {e.Message}",
manifestInvalid: e => $"Manifest invalid: {e.Message}",
dependencyMissing: e => $"Missing dep: {e.Message}",
dependencyCycle: e => $"Cycle: {e.Message}",
loadFailed: e => $"Load failed: {e.Message}",
entryPointNotFound: e => $"No entry point: {e.Message}",
alreadyLoaded: e => $"Already loaded: {e.Message}",
invalidState: e => $"Bad state: {e.Message}",
sourceUnavailable: e => $"Source gone: {e.Message}",
archiveCorrupt: e => $"Corrupt archive: {e.Message}",
packagingFailed: e => $"Packaging error: {e.Message}",
versionInvalid: e => $"Bad version: {e.Message}",
permissionDenied: e => $"Denied: {e.Message}",
reloadFailed: e => $"Reload error: {e.Message}",
migrationFailed: e => $"Migration error: {e.Message}");
License
MIT -- see LICENSE for details.
| 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 is compatible. 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 | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
NuGet packages (14)
Showing the top 5 NuGet packages that depend on Slotly.Core:
| Package | Downloads |
|---|---|
|
Slotly.Versioning
Semantic versioning parser and range matcher for the Slotly plugin framework. |
|
|
Slotly.Manifest
Manifest reading and validation abstractions for the Slotly plugin framework. |
|
|
Slotly.Packaging
Plugin packaging and source abstractions for the Slotly plugin framework. |
|
|
Slotly.HotReload
Hot-reload abstractions for live plugin reloading in the Slotly plugin framework. |
|
|
Slotly.Loading
Plugin loading abstractions for the Slotly plugin framework. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version 10.0.2: Updated Rustly dependency to 10.2.1 (EnumValue returns Option, Newtonsoft.Json support, EnumValue JSON/TypeConverter).