add RegisterAll(Assembly) method

This commit is contained in:
2024-05-01 09:09:06 +02:00
parent 554103781a
commit 7936052279

View File

@@ -50,36 +50,36 @@ namespace Pilz.Plugins.Advanced
Modules = new(this); Modules = new(this);
} }
//public void RegisterAll() public void RegisterAll(Assembly assembly)
//{ {
// var assembly = Assembly.GetCallingAssembly(); 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()) foreach (var type in assembly.GetTypes())
// { {
// if (type.IsAssignableFrom(typeof(IPluginFeaturesProvider))) if (type.IsAssignableTo(typeof(IPluginFeaturesProvider)))
// { {
// var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); 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))); var method = methods.FirstOrDefault(n => n.Name == nameGetFeaturesExplicit || n.Name == nameGetFeatures);
// if (method != null && method.Invoke(null, null) is PluginFeature[] features) if (method != null && method.Invoke(null, null) is PluginFeature[] features)
// { {
// foreach (var feature in features) foreach (var feature in features)
// Register(feature); Register(feature);
// } }
// } }
// else if (type.IsAssignableFrom(typeof(IPluginFeatureProvider<>))) else if (type.IsAssignableTo(typeof(IPluginFeatureProvider)))
// { {
// var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); var methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
// var method = methods.FirstOrDefault(n => n.Name == nameof(IPluginFeatureProvider<PluginFeature>.Instance) || n.Name.EndsWith(nameof(IPluginFeatureProvider.Instance))); var method = methods.FirstOrDefault(n => n.Name == nameInstnaceExplicit || n.Name == nameInstance);
// if (method != null && method.Invoke(null, null) is PluginFeature[] features) if (method != null && method.Invoke(null, null) is PluginFeature feature)
// { Register(feature);
// foreach (var feature in features) }
// Register(feature); }
// } }
// }
// }
//}
public void Register<TProvider>() where TProvider : IPluginFeatureProvider public void Register<TProvider>() where TProvider : IPluginFeatureProvider
{ {