Software abstraction layer core API. Base SAL Interfaces.
$ dotnet add package SAL.FlatbedSAL is a plugin-based architecture for building modular .NET applications, originally developed in 2009. The system provides a flexible foundation for creating extensible applications with centralized configuration management and role-based feature availability.
Centralized Settings Management
ISettingsProvider implementationsDynamic Module Loading
IPluginProvider interfaceFlexible UI Integration
Cross-Platform Architecture
Application Layer
SAL Host
Plugins
The architecture is built around plugins implementing the IPlugin interface, with key characteristics:
SAL.Flatbed.dll
SAL.Windows.dll
Provider Loading
ISettingsProvider)IPluginProvider)Kernel Plugin Detection (optional)
IPluginKernel)Plugin Initialization
public class MyPlugin : IPlugin
{
private readonly IHost _host;
public MyPlugin(IHost host)
=> this._host = host;//Optional constructor
public Boolean OnConnection(ConnectMode mode)
=> return true;
public Boolean OnDisconnection(DisconnectMode mode)
=> return true;
}
public class Plugin : IPlugin, IPluginSettings<PluginSettings>
{
private PluginSettings _settings;
public PluginSettings Settings
{
get
{
if(_settings == null)
{
_settings = new PluginSettings(this);
Host.Plugins.Settings(this).LoadAssemblyParameters(_settings);
}
return _settings;
}
}
Object IPluginSettings.Settings { get { return Settings; } }
}
// Loading data
using(Stream stream = Plugin.Host.Plugins.Settings(Plugin).LoadAssemblyBlob("DataSet.xml"))
if(stream != null)
DataSet.ReadXml(stream);
// Saving data
using(MemoryStream stream = new MemoryStream())
{
DataSet.WriteXml(stream);
Plugin.Host.Plugins.Settings(this).SaveAssemblyBlob("DataSet.xml", stream);
}
Contributions are welcome. Please ensure your changes maintain compatibility with the supported .NET versions.