private void OnAddonLoaded(string typename, bool success, DBAddon addon, Exception exception) { if (addon != null && success) { addon.Execute(Form.ActiveForm); } if (onADDLoad != null) { onADDLoad.Invoke(typename, success, exception); } }
public List <DBAddon> LoadAddons() { if (!Directory.Exists(ADDPath)) { Directory.CreateDirectory(ADDPath); return(null); } string[] files = Directory.GetFiles(ADDPath, $"*{ADDExtension}", SearchOption.AllDirectories); foreach (var file in files) { Assembly.LoadFile(Path.GetFullPath(file)); if (OnAddonFileLoaded != null) { OnAddonFileLoaded.Invoke(file); } } List <DBAddon> addons = new List <DBAddon>(); try { Type interfaceType = typeof(DBAddon); Type[] types = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(t => t.GetTypes()) .Where(t => t.IsClass && interfaceType.IsAssignableFrom(t)) .ToArray(); foreach (var type in types) { try { DBAddon addon = (DBAddon)Activator.CreateInstance(type); addons.Add(addon); if (OnAddonLoaded != null) { OnAddonLoaded.Invoke(type.FullName, true, addon); } } catch (Exception exception) { if (OnAddonLoaded != null) { OnAddonLoaded.Invoke(type.FullName, false, null, exception); } } } } catch (Exception ex) { MessageBox.Show(ex.Message); return(null); } return(addons); }