public PluginLoader(Instance instance, string path) { List <IRegisteredPlugin> registeredPlugins = new(); foreach (string pluginPath in InbuiltPluginFinder.GetInbuiltPlugins(path)) { PluginLoadContext pluginContext = new(pluginPath); Assembly pluginAssembly = pluginContext.LoadFromAssemblyName(new AssemblyName(Path.GetFileNameWithoutExtension(pluginPath))); foreach (Type type in pluginAssembly.GetExportedTypes()) { if (typeof(IPlugin).IsAssignableFrom(type) && !type.IsInterface) { IPlugin plugin = (IPlugin)Activator.CreateInstance(type); RegisteredPlugin registeredPlugin = new(plugin, instance); if (AutoLoadPlugins.Contains(registeredPlugin.PluginName)) { registeredPlugin.Load(); } if (registeredPlugin.PluginName == "Base plugin functionality") { registeredPlugin.RegisterNode(new InputNode()); } registeredPlugins.Add(registeredPlugin); } } } RegisteredPlugins = registeredPlugins.ToArray(); }
public PluginLoader(IPluginHost pluginHost) { foreach (string pluginPath in InbuiltPluginFinder.GetInbuiltPlugins()) { PluginLoadContext pluginContext = new(pluginPath); Assembly pluginAssembly = pluginContext.LoadFromAssemblyName(new AssemblyName(Path.GetFileNameWithoutExtension(pluginPath))); foreach (Type type in pluginAssembly.GetExportedTypes()) { if (typeof(IPlugin).IsAssignableFrom(type) && !type.IsInterface) { IPlugin plugin = (IPlugin)Activator.CreateInstance(type); plugin.Register(pluginHost); } } } }