Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 2
0
        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);
        }