public virtual async Task <bool> ActivatePluginAsync(string name) { IPlugin plugin = GetPlugin(name); if (plugin != null) { if (plugin.IsAlive) { return(false); } await plugin.ActivateAsync(false); return(plugin.IsAlive); } if (File.Exists(name)) { Assembly asm = LoadCachedAssembly(name); plugin = LoadPluginFromAssembly(asm, out IDependencyContainer _); if (plugin == null) { return(false); } if (!plugin.IsAlive) { await plugin.ActivateAsync(true); } return(true); } return(true); }
protected async Task <bool> RegisterAndLoadPluginFromContainer(IDependencyContainer container) { IPlugin plugin = container.Resolve <IPlugin>(); Logger.LogDebug($"[{GetType().Name}] Trying to load plugin: " + plugin.Name); PluginCommandProvider cmdProvider = new PluginCommandProvider(plugin); ParentContainer.RegisterSingletonInstance <ICommandProvider>(cmdProvider, plugin.Name); var asm = plugin.GetType().Assembly; string pluginDir = plugin.WorkingDirectory; //if (!Directory.Exists(pluginDir)) // Directory.CreateDirectory(pluginDir); foreach (string s in asm.GetManifestResourceNames()) { using (Stream stream = asm.GetManifestResourceStream(s)) { using (MemoryStream ms = new MemoryStream()) { if (stream != null) { stream.CopyTo(ms); byte[] data = ms.ToArray(); string fileName = s.Replace(plugin.GetType().Namespace, ""); File.WriteAllBytes(Path.Combine(pluginDir, fileName), data); } } } } bool success = await plugin.ActivateAsync(false); if (!success) { return(false); } IEnumerable <Type> listeners = plugin.FindTypes <IAutoRegisteredEventListener>(false); foreach (Type listener in listeners) { IAutoRegisteredEventListener instance = (IAutoRegisteredEventListener)container.Activate(listener); EventBus.AddEventListener(plugin, instance); } return(true); }