PluginLoadContext.cs 947 B

123456789101112131415161718192021222324252627282930313233
  1. using System.Reflection;
  2. using System.Runtime.Loader;
  3. namespace Emby.Server.Implementations.Plugins;
  4. /// <summary>
  5. /// A custom <see cref="AssemblyLoadContext"/> for loading Jellyfin plugins.
  6. /// </summary>
  7. public class PluginLoadContext : AssemblyLoadContext
  8. {
  9. private readonly AssemblyDependencyResolver _resolver;
  10. /// <summary>
  11. /// Initializes a new instance of the <see cref="PluginLoadContext"/> class.
  12. /// </summary>
  13. /// <param name="path">The path of the plugin assembly.</param>
  14. public PluginLoadContext(string path) : base(true)
  15. {
  16. _resolver = new AssemblyDependencyResolver(path);
  17. }
  18. /// <inheritdoc />
  19. protected override Assembly? Load(AssemblyName assemblyName)
  20. {
  21. var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);
  22. if (assemblyPath is not null)
  23. {
  24. return LoadFromAssemblyPath(assemblyPath);
  25. }
  26. return null;
  27. }
  28. }