mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-08 10:44:20 -04:00
Implementing plugin's external dependencies loading
This commit is contained in:
parent
fe3407b334
commit
96f5b61b15
@ -11,7 +11,7 @@
|
||||
<Company>SDG</Company>
|
||||
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
|
||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||
<PackageVersion>1.0.9</PackageVersion>
|
||||
<PackageVersion>1.0.10</PackageVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -3,12 +3,39 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Loader;
|
||||
using Kyoo.Models;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Kyoo.Controllers
|
||||
{
|
||||
public class PluginDependencyLoader : AssemblyLoadContext
|
||||
{
|
||||
private readonly AssemblyDependencyResolver _resolver;
|
||||
|
||||
public PluginDependencyLoader(string pluginPath)
|
||||
{
|
||||
_resolver = new AssemblyDependencyResolver(pluginPath);
|
||||
}
|
||||
|
||||
protected override Assembly Load(AssemblyName assemblyName)
|
||||
{
|
||||
string assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);
|
||||
if (assemblyPath != null)
|
||||
return LoadFromAssemblyPath(assemblyPath);
|
||||
return base.Load(assemblyName);
|
||||
}
|
||||
|
||||
protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
|
||||
{
|
||||
string libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName);
|
||||
if (libraryPath != null)
|
||||
return LoadUnmanagedDllFromPath(libraryPath);
|
||||
return base.LoadUnmanagedDll(unmanagedDllName);
|
||||
}
|
||||
}
|
||||
|
||||
public class PluginManager : IPluginManager
|
||||
{
|
||||
private readonly IServiceProvider _provider;
|
||||
@ -47,7 +74,8 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
Assembly ass = Assembly.LoadFile(Path.GetFullPath(path));
|
||||
PluginDependencyLoader loader = new PluginDependencyLoader(Path.GetFullPath(path));
|
||||
Assembly ass = loader.LoadFromAssemblyPath(Path.GetFullPath(path));
|
||||
return (from type in ass.GetTypes()
|
||||
where typeof(IPlugin).IsAssignableFrom(type)
|
||||
select (IPlugin) ActivatorUtilities.CreateInstance(_provider, type)).FirstOrDefault();
|
||||
|
Loading…
x
Reference in New Issue
Block a user