Add support for pluginloader config method to PluginInstance
This commit is contained in:
@@ -7,9 +7,12 @@ namespace CringePlugins.Loader;
|
|||||||
|
|
||||||
internal sealed class PluginInstance
|
internal sealed class PluginInstance
|
||||||
{
|
{
|
||||||
|
public bool HasConfig => _openConfigAction != null;
|
||||||
|
|
||||||
private readonly string _entrypointPath;
|
private readonly string _entrypointPath;
|
||||||
private PluginAssemblyLoadContext? _context;
|
private PluginAssemblyLoadContext? _context;
|
||||||
private IPlugin? _instance;
|
private IPlugin? _instance;
|
||||||
|
private Action? _openConfigAction;
|
||||||
private IHandleInputPlugin? _handleInputInstance;
|
private IHandleInputPlugin? _handleInputInstance;
|
||||||
public PluginMetadata Metadata { get; }
|
public PluginMetadata Metadata { get; }
|
||||||
|
|
||||||
@@ -40,6 +43,18 @@ internal sealed class PluginInstance
|
|||||||
throw new InvalidOperationException("Entrypoint contains multiple plugins");
|
throw new InvalidOperationException("Entrypoint contains multiple plugins");
|
||||||
|
|
||||||
_instance = (IPlugin) Activator.CreateInstance(plugins[0])!;
|
_instance = (IPlugin) Activator.CreateInstance(plugins[0])!;
|
||||||
|
|
||||||
|
var openConfigMethod = plugins[0].GetMethod("OpenConfigDialog");
|
||||||
|
|
||||||
|
if (openConfigMethod is not null)
|
||||||
|
{
|
||||||
|
//todo: log this and continue without action instead of throwing exception
|
||||||
|
if (openConfigMethod.ReturnType != typeof(void) || openConfigMethod.IsStatic || openConfigMethod.GetParameters().Length > 0)
|
||||||
|
throw new InvalidOperationException("OpenConfigDialog method has an incorrect signature");
|
||||||
|
|
||||||
|
_openConfigAction = openConfigMethod.CreateDelegate<Action>(_instance);
|
||||||
|
}
|
||||||
|
|
||||||
_handleInputInstance = _instance as IHandleInputPlugin;
|
_handleInputInstance = _instance as IHandleInputPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,4 +67,12 @@ internal sealed class PluginInstance
|
|||||||
if (_handleInputInstance is not null)
|
if (_handleInputInstance is not null)
|
||||||
MyPlugins.m_handleInputPlugins.Add(_handleInputInstance);
|
MyPlugins.m_handleInputPlugins.Add(_handleInputInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OpenConfig()
|
||||||
|
{
|
||||||
|
if (_openConfigAction is null)
|
||||||
|
throw new InvalidOperationException("Plugin does not have OpenConfigDialog method");
|
||||||
|
|
||||||
|
_openConfigAction();
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user