2022-08-27 12:37:49 -05:00
|
|
|
using System.Reflection;
|
|
|
|
using NftFaucetRadzen.Plugins.NetworkPlugins;
|
|
|
|
using NftFaucetRadzen.Plugins.ProviderPlugins;
|
2022-08-28 19:05:50 -05:00
|
|
|
using NftFaucetRadzen.Plugins.UploadPlugins;
|
2022-08-27 12:37:49 -05:00
|
|
|
|
|
|
|
namespace NftFaucetRadzen.Services;
|
|
|
|
|
2022-08-27 17:22:50 -05:00
|
|
|
public class PluginLoader
|
2022-08-27 12:37:49 -05:00
|
|
|
{
|
|
|
|
public IReadOnlyCollection<INetworkPlugin> NetworkPlugins { get; private set; }
|
|
|
|
public IReadOnlyCollection<IProviderPlugin> ProviderPlugins { get; private set; }
|
2022-08-28 19:05:50 -05:00
|
|
|
public IReadOnlyCollection<IUploadPlugin> UploadPlugins { get; private set; }
|
2022-08-27 12:37:49 -05:00
|
|
|
|
|
|
|
public bool ArePluginsLoaded { get; private set; }
|
|
|
|
|
2022-08-27 17:22:50 -05:00
|
|
|
public void EnsurePluginsLoaded()
|
2022-08-27 12:37:49 -05:00
|
|
|
{
|
|
|
|
if (ArePluginsLoaded)
|
|
|
|
{
|
2022-08-27 17:22:50 -05:00
|
|
|
return;
|
2022-08-27 12:37:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
var assembly = Assembly.GetExecutingAssembly();
|
|
|
|
var allTypes = assembly.GetTypes();
|
|
|
|
|
|
|
|
var networkPluginTypes = allTypes.Where(x => x.IsClass && typeof(INetworkPlugin).IsAssignableFrom(x)).ToArray();
|
|
|
|
var providerPluginTypes = allTypes.Where(x => x.IsClass && typeof(IProviderPlugin).IsAssignableFrom(x)).ToArray();
|
2022-08-28 19:05:50 -05:00
|
|
|
var uploadPluginTypes = allTypes.Where(x => x.IsClass && typeof(IUploadPlugin).IsAssignableFrom(x)).ToArray();
|
2022-08-27 12:37:49 -05:00
|
|
|
|
2022-08-27 17:22:50 -05:00
|
|
|
NetworkPlugins = networkPluginTypes.Select(x => (INetworkPlugin) Activator.CreateInstance(x)).ToArray();
|
|
|
|
ProviderPlugins = providerPluginTypes.Select(x => (IProviderPlugin) Activator.CreateInstance(x)).ToArray();
|
2022-08-28 19:05:50 -05:00
|
|
|
UploadPlugins = uploadPluginTypes.Select(x => (IUploadPlugin) Activator.CreateInstance(x)).ToArray();
|
2022-08-27 12:37:49 -05:00
|
|
|
|
|
|
|
ArePluginsLoaded = true;
|
|
|
|
}
|
|
|
|
}
|