37 lines
1.5 KiB
C#
Raw Normal View History

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;
}
}