From 6fb68f282a189109b1b8fcfcdeb0b434eaade3e2 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Mon, 20 Oct 2025 05:57:17 +0200 Subject: [PATCH] assembly whitelist --- Pilz.Plugins/Pilz.Plugins.csproj | 2 +- Pilz.Plugins/PluginManager{T,T}.cs | 36 +++++++++++++++++------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Pilz.Plugins/Pilz.Plugins.csproj b/Pilz.Plugins/Pilz.Plugins.csproj index 92ecf8f..f128821 100644 --- a/Pilz.Plugins/Pilz.Plugins.csproj +++ b/Pilz.Plugins/Pilz.Plugins.csproj @@ -8,7 +8,7 @@ - 2.1.11 + 2.2.0 diff --git a/Pilz.Plugins/PluginManager{T,T}.cs b/Pilz.Plugins/PluginManager{T,T}.cs index 816adef..d582e02 100644 --- a/Pilz.Plugins/PluginManager{T,T}.cs +++ b/Pilz.Plugins/PluginManager{T,T}.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using Pilz.Text; +using System.Reflection; namespace Pilz.Plugins; @@ -18,7 +19,7 @@ public class PluginManager where TPluginIn protected void OnCurrentAppDomainAssemblyLoad(object? sender, AssemblyLoadEventArgs args) { - LoadPlugins(args.LoadedAssembly); + LoadPlugins(args.LoadedAssembly, null); } /// @@ -27,7 +28,7 @@ public class PluginManager where TPluginIn /// /// /// - public virtual IEnumerable> LoadPlugins(string[] paths, params object?[]? parameters) + public virtual IEnumerable> LoadPlugins(string[] paths, object?[]? parameters) { var results = new List>(); @@ -43,7 +44,7 @@ public class PluginManager where TPluginIn /// /// /// - public virtual IEnumerable> LoadPlugins(Assembly[] assemblies, params object?[]? parameters) + public virtual IEnumerable> LoadPlugins(Assembly[] assemblies, object?[]? parameters) { var results = new List>(); @@ -57,25 +58,30 @@ public class PluginManager where TPluginIn /// Loads plugins from already loaded assemblies for the current . /// /// - public virtual IEnumerable> LoadOwnPlugins(params object?[]? parameters) + public virtual IEnumerable> LoadOwnPlugins(object?[]? parameters, string? whitelist) { - return LoadOwnPlugins(false, parameters); + return LoadOwnPlugins(false, parameters, whitelist); } /// /// Loads plugins from already loaded assemblies for the current . /// /// Do also load plugins from all yet not loaded assemblies by listening the event + /// >. /// >. /// - public virtual IEnumerable> LoadOwnPlugins(bool listenAssemblyLoadContext, params object?[]? parameters) + public virtual IEnumerable> LoadOwnPlugins(bool listenAssemblyLoadContext, object?[]? parameters, string? whitelist) { var results = new List>(); if (listenAssemblyLoadContext) AppDomain.CurrentDomain.AssemblyLoad += OnCurrentAppDomainAssemblyLoad; - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + var assemblies = AppDomain.CurrentDomain.GetAssemblies().AsEnumerable(); + if (!string.IsNullOrWhiteSpace(whitelist)) + assemblies = assemblies.Where(n => LikeOperator.IsLike(n.GetName().Name, whitelist)); + + foreach (var assembly in assemblies) results.Add(LoadPlugins(assembly, parameters)); return results; @@ -87,7 +93,7 @@ public class PluginManager where TPluginIn /// /// /// - public virtual PluginLoadInfo LoadPlugin(string path, params object?[]? parameters) + public virtual PluginLoadInfo LoadPlugin(string path, object?[]? parameters) { var result = new PluginLoadInfo(); var loadContext = new PluginLoadContext(path); @@ -118,7 +124,7 @@ public class PluginManager where TPluginIn /// /// /// - public virtual PluginLoadInfo LoadPlugins(Assembly assembly, params object?[]? parameters) + public virtual PluginLoadInfo LoadPlugins(Assembly assembly, object?[]? parameters) { var result = new PluginLoadInfo { @@ -137,7 +143,7 @@ public class PluginManager where TPluginIn /// /// /// - public virtual PluginLoadInfo LoadPlugin(params object?[]? parameters) where TPlugin : TPluginInterface + public virtual PluginLoadInfo LoadPlugin(object?[]? parameters) where TPlugin : TPluginInterface { var result = new PluginLoadInfo { @@ -149,12 +155,12 @@ public class PluginManager where TPluginIn return result; } - protected virtual void LoadPlugin(PluginLoadInfo result, params object?[]? parameters) + protected virtual void LoadPlugin(PluginLoadInfo result, object?[]? parameters) { if (result.Assembly == null) result.Status = PluginLoadStatus.NoValidPlugin; - else if (loadedPlugins.Any(n => n.Assembly == result.Assembly)) - result.Status = PluginLoadStatus.AlreadyLoaded; + //else if (loadedPlugins.Any(n => n.Assembly == result.Assembly)) + // result.Status = PluginLoadStatus.AlreadyLoaded; else { foreach (var type in result.Assembly.GetTypes()) @@ -165,7 +171,7 @@ public class PluginManager where TPluginIn result.Status = PluginLoadStatus.NoValidPlugin; } - protected virtual void LoadPlugin(PluginLoadInfo result, Type type, params object?[]? parameters) + protected virtual void LoadPlugin(PluginLoadInfo result, Type type, object?[]? parameters) { if (loadedPlugins.Any(n => n.Plugin != null && n.Plugin.GetType() == type)) result.Status = PluginLoadStatus.AlreadyLoaded;