From 7936052279c8a12d6fff0ab77899058a3f45e845 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Wed, 1 May 2024 09:09:06 +0200 Subject: [PATCH] add RegisterAll(Assembly) method --- .../PluginFeatureController.cs | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Pilz.Plugins.Advanced/PluginFeatureController.cs b/Pilz.Plugins.Advanced/PluginFeatureController.cs index 66ae903..0c4e9e9 100644 --- a/Pilz.Plugins.Advanced/PluginFeatureController.cs +++ b/Pilz.Plugins.Advanced/PluginFeatureController.cs @@ -50,36 +50,36 @@ namespace Pilz.Plugins.Advanced Modules = new(this); } - //public void RegisterAll() - //{ - // var assembly = Assembly.GetCallingAssembly(); + public void RegisterAll(Assembly assembly) + { + const string nameGetFeatures = $"{nameof(IPluginFeaturesProvider.GetFeatures)}"; + const string nameGetFeaturesExplicit = $"{nameof(IPluginFeaturesProvider)}.{nameof(IPluginFeaturesProvider.GetFeatures)}"; + const string nameInstance = $"get_{nameof(IPluginFeatureProvider.Instance)}"; + const string nameInstnaceExplicit = $"get_{nameof(IPluginFeatureProvider)}.{nameof(IPluginFeatureProvider.Instance)}"; - // foreach (var type in assembly.GetTypes()) - // { - // if (type.IsAssignableFrom(typeof(IPluginFeaturesProvider))) - // { - // var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); - // var method = methods.FirstOrDefault(n => n.Name == nameof(IPluginFeaturesProvider.GetFeatures) || n.Name.EndsWith(nameof(IPluginFeaturesProvider.GetFeatures))); + foreach (var type in assembly.GetTypes()) + { + if (type.IsAssignableTo(typeof(IPluginFeaturesProvider))) + { + var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + var method = methods.FirstOrDefault(n => n.Name == nameGetFeaturesExplicit || n.Name == nameGetFeatures); - // if (method != null && method.Invoke(null, null) is PluginFeature[] features) - // { - // foreach (var feature in features) - // Register(feature); - // } - // } - // else if (type.IsAssignableFrom(typeof(IPluginFeatureProvider<>))) - // { - // var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); - // var method = methods.FirstOrDefault(n => n.Name == nameof(IPluginFeatureProvider.Instance) || n.Name.EndsWith(nameof(IPluginFeatureProvider.Instance))); + if (method != null && method.Invoke(null, null) is PluginFeature[] features) + { + foreach (var feature in features) + Register(feature); + } + } + else if (type.IsAssignableTo(typeof(IPluginFeatureProvider))) + { + var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + var method = methods.FirstOrDefault(n => n.Name == nameInstnaceExplicit || n.Name == nameInstance); - // if (method != null && method.Invoke(null, null) is PluginFeature[] features) - // { - // foreach (var feature in features) - // Register(feature); - // } - // } - // } - //} + if (method != null && method.Invoke(null, null) is PluginFeature feature) + Register(feature); + } + } + } public void Register() where TProvider : IPluginFeatureProvider {