diff options
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.Loading/src')
4 files changed, 23 insertions, 7 deletions
diff --git a/lib/VNLib.Plugins.Extensions.Loading/src/AssemblyLoader.cs b/lib/VNLib.Plugins.Extensions.Loading/src/AssemblyLoader.cs index 3668f24..f3e03dd 100644 --- a/lib/VNLib.Plugins.Extensions.Loading/src/AssemblyLoader.cs +++ b/lib/VNLib.Plugins.Extensions.Loading/src/AssemblyLoader.cs @@ -46,7 +46,7 @@ namespace VNLib.Plugins.Extensions.Loading /// </para> /// </summary> /// <typeparam name="T">The exported type to manage</typeparam> - public class AssemblyLoader<T> : OpenResourceHandle<T> + public sealed class AssemblyLoader<T> : OpenResourceHandle<T> { private readonly PluginLoader _loader; private readonly CancellationTokenRegistration _reg; diff --git a/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs b/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs index a1da118..fc88612 100644 --- a/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs +++ b/lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs @@ -43,6 +43,11 @@ namespace VNLib.Plugins.Extensions.Loading /// </summary> public static class LoadingExtensions { + /// <summary> + /// A key in the 'plugins' configuration object that specifies + /// an asset search directory + /// </summary> + public const string PLUGIN_ASSET_KEY = "assets"; public const string DEBUG_CONFIG_KEY = "debug"; public const string SECRETS_CONFIG_KEY = "secrets"; public const string PASSWORD_HASHING_KEY = "passwords"; @@ -162,6 +167,10 @@ namespace VNLib.Plugins.Extensions.Loading /// <exception cref="ArgumentNullException"></exception> /// <exception cref="FileNotFoundException"></exception> /// <exception cref="EntryPointNotFoundException"></exception> + /// <remarks> + /// The assembly is searched within the 'assets' directory specified in the plugin config + /// or the global plugins ('path' key) directory if an assets directory is not defined. + /// </remarks> public static AssemblyLoader<T> LoadAssembly<T>(this PluginBase plugin, string assemblyName, SearchOption dirSearchOption = SearchOption.AllDirectories) { plugin.ThrowIfUnloaded(); @@ -169,16 +178,23 @@ namespace VNLib.Plugins.Extensions.Loading //get plugin directory from config IReadOnlyDictionary<string, JsonElement> config = plugin.GetConfig("plugins"); - string? pluginsBaseDir = config["path"].GetString(); + + /* + * Allow an assets directory to limit the scope of the search for the desired + * assembly, otherwise search all plugins directories + */ + + string? assetDir = config["assets"].GetString(); + assetDir ??= config["path"].GetString(); /* * This should never happen since this method can only be called from a * plugin context, which means this path was used to load the current plugin */ - _ = pluginsBaseDir ?? throw new ArgumentNullException("path", "No plugin path is defined for the current host configuration, this is likely a bug"); + _ = assetDir ?? throw new ArgumentNullException("assets", "No plugin path is defined for the current host configuration, this is likely a bug"); //Get the first file that matches the search file - string? asmFile = Directory.EnumerateFiles(pluginsBaseDir, assemblyName, dirSearchOption).FirstOrDefault(); + string? asmFile = Directory.EnumerateFiles(assetDir, assemblyName, dirSearchOption).FirstOrDefault(); _ = asmFile ?? throw new FileNotFoundException($"Failed to load custom assembly {assemblyName} from plugin directory"); //Load the assembly diff --git a/lib/VNLib.Plugins.Extensions.Loading/src/VNLib.Plugins.Extensions.Loading.csproj b/lib/VNLib.Plugins.Extensions.Loading/src/VNLib.Plugins.Extensions.Loading.csproj index 15bb15e..d2ea746 100644 --- a/lib/VNLib.Plugins.Extensions.Loading/src/VNLib.Plugins.Extensions.Loading.csproj +++ b/lib/VNLib.Plugins.Extensions.Loading/src/VNLib.Plugins.Extensions.Loading.csproj @@ -32,8 +32,9 @@ </ItemGroup> <ItemGroup> - <ProjectReference Include="..\..\..\VNLib\Essentials\src\VNLib.Plugins.Essentials.csproj" /> - <ProjectReference Include="..\..\PluginBase\VNLib.Plugins.PluginBase.csproj" /> + <ProjectReference Include="..\..\..\..\..\core\lib\Plugins.Essentials\src\VNLib.Plugins.Essentials.csproj" /> + <ProjectReference Include="..\..\..\..\..\core\lib\Plugins.PluginBase\src\VNLib.Plugins.PluginBase.csproj" /> + <ProjectReference Include="..\..\..\..\..\core\lib\Utils\src\VNLib.Utils.csproj" /> </ItemGroup> </Project> diff --git a/lib/VNLib.Plugins.Extensions.Loading/src/VaultSecrets.cs b/lib/VNLib.Plugins.Extensions.Loading/src/VaultSecrets.cs index 84f51b3..2b6bfd8 100644 --- a/lib/VNLib.Plugins.Extensions.Loading/src/VaultSecrets.cs +++ b/lib/VNLib.Plugins.Extensions.Loading/src/VaultSecrets.cs @@ -42,7 +42,6 @@ using VNLib.Utils.Memory; using VNLib.Utils.Logging; using VNLib.Utils.Extensions; using VNLib.Hashing.IdentityUtility; -using System.Threading; namespace VNLib.Plugins.Extensions.Loading { |