public void OnSceneChanged(Scene prev, Scene next) { foreach (var plugin in plugins) { try { plugin.OnSceneChanged(prev, next); } catch (Exception e) { logger.Error($"{e}", plugin.Name); } } }
private static IEnumerable <IPlugin> LoadPluginsFromFile(string file, string exeName, Logging.IPALogger logger) { List <IPlugin> plugins = new List <IPlugin>(); if (!File.Exists(file) || !file.EndsWith(".dll", true, null)) { return(plugins); } try { Assembly assembly = Assembly.LoadFrom(file); foreach (Type t in assembly.GetTypes()) { if (t.GetInterface("IPlugin") != null) { try { IPlugin pluginInstance = Activator.CreateInstance(t) as IPlugin; string[] filter = null; if (pluginInstance is IEnhancedPlugin) { filter = ((IEnhancedPlugin)pluginInstance).Filter; } if (filter == null || Enumerable.Contains(filter, exeName, StringComparer.OrdinalIgnoreCase)) { plugins.Add(pluginInstance); } } catch (Exception e) { logger.Warning($"Could not load plugin {t.FullName} in {Path.GetFileName(file)}. {e}", "IPA"); } } } } catch (Exception e) { logger.Error($"Could not load {Path.GetFileName(file)}. {e}", "IPA"); } return(plugins); }