From d7ba63a642488e71ee0253d49dcd15a3d6bddd41 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Mon, 3 Mar 2025 11:17:53 +0100 Subject: [PATCH] add IPluginFeatureConstructor as alternative provider option --- .../IPluginFeatureConstructor.cs | 5 +++++ Pilz.Plugins.Advanced/PluginFeatureController.cs | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Pilz.Plugins.Advanced/IPluginFeatureConstructor.cs diff --git a/Pilz.Plugins.Advanced/IPluginFeatureConstructor.cs b/Pilz.Plugins.Advanced/IPluginFeatureConstructor.cs new file mode 100644 index 0000000..57fbf26 --- /dev/null +++ b/Pilz.Plugins.Advanced/IPluginFeatureConstructor.cs @@ -0,0 +1,5 @@ +namespace Pilz.Plugins.Advanced; + +public interface IPluginFeatureConstructor +{ +} diff --git a/Pilz.Plugins.Advanced/PluginFeatureController.cs b/Pilz.Plugins.Advanced/PluginFeatureController.cs index a63a44f..e006383 100644 --- a/Pilz.Plugins.Advanced/PluginFeatureController.cs +++ b/Pilz.Plugins.Advanced/PluginFeatureController.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using Microsoft.VisualBasic; +using System.Reflection; namespace Pilz.Plugins.Advanced; @@ -132,6 +133,19 @@ public class PluginFeatureController if (method != null && method.Invoke(null, null) is PluginFeature feature) Register(feature); } + else if (type.IsAssignableTo(typeof(IPluginFeatureConstructor))) + { + if (type.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic, [typeof(PluginFeatureController)]) is ConstructorInfo ctor1) + { + if (ctor1.Invoke([this]) is PluginFeature feature) + Register(feature); + } + else if (type.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic, []) is ConstructorInfo ctor) + { + if (ctor.Invoke([this]) is PluginFeature feature) + Register(feature); + } + } } ///