aboutsummaryrefslogtreecommitdiff
path: root/lib/VNLib.Plugins.Extensions.Loading/src
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-01-12 17:47:41 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2023-01-12 17:47:41 -0500
commitca5aba91ebf212d790b98a9364e2d54962b3f7be (patch)
tree00d5148095c656da59e033b5583edd57b40f3fea /lib/VNLib.Plugins.Extensions.Loading/src
parent0bf1695b1685b727a251e72ba9f24a3372486c27 (diff)
Large project reorder and consolidation
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.Loading/src')
-rw-r--r--lib/VNLib.Plugins.Extensions.Loading/src/AssemblyLoader.cs2
-rw-r--r--lib/VNLib.Plugins.Extensions.Loading/src/LoadingExtensions.cs22
-rw-r--r--lib/VNLib.Plugins.Extensions.Loading/src/VNLib.Plugins.Extensions.Loading.csproj5
-rw-r--r--lib/VNLib.Plugins.Extensions.Loading/src/VaultSecrets.cs1
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
{