using System.IO; using System.Reflection; using System.Runtime.Loader; using Azaion.Suite.Services.DTO; using Microsoft.Extensions.Options; namespace Azaion.Suite; public class DynamicAssemblyLoader(IOptions localFilesConfig) : AssemblyLoadContext { private static readonly Dictionary LoadedAssemblies = new(); static DynamicAssemblyLoader() { LoadedAssemblies = Default.Assemblies.ToDictionary(a => a.GetName().Name, a => a); } protected override Assembly Load(AssemblyName assemblyName) { var assembly = LoadedAssemblies.GetValueOrDefault(assemblyName.Name); if (assembly != null) return assembly; var currentLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!; var asm = Assembly.LoadFile(Path.Combine(currentLocation, localFilesConfig.Value.DllPath, $"{assemblyName.Name!}.dll")); return asm; } }