Example #1
0
        public void Depends(IPluginAPI currentPlugin, string pluginName)
        {
            var dependantPlugin = _plugins.GetValueOrDefault(pluginName, null);

            if (dependantPlugin != null)
            {
                return;
            }
            this.LoadPlugin(pluginName);
            dependantPlugin = _plugins[pluginName];
        }
Example #2
0
        public IPluginAPI LoadPlugin(string pluginName)
        {
            PluginLoader loader;
            var          pluginDll = Path.Combine(_currentPluginFolderPath, pluginName, pluginName + ".dll");

            if (File.Exists(pluginDll))
            {
                Log.Debug("Found plugin " + pluginName);
                Log.Debug("Trying to initialize plugin " + pluginName);
                loader = PluginLoader.CreateFromAssemblyFile(
                    pluginDll,
                    sharedTypes: new[] {
                    typeof(Log),
                    typeof(IPluginAPI),
                    typeof(IPluginHostAPI),
                    typeof(IPluginManager),
                    typeof(IAuthProvider),
                    typeof(IExposedSessionManager),
                    typeof(IC2SMessageHandler),
                    typeof(ICoreEventHandler),
                    typeof(BaseMessage),
                    typeof(CoreEvent),
                    typeof(ExportedIPCMethodAttribute),
                    typeof(IMongoDatabase),
                    typeof(AuthorizationRequest),
                    typeof(AuthorizationResponse)
                },
                    config => config.PreferSharedTypes = true
                    );
            }
            else
            {
                throw new Exception("specified plugin is not found");
            }

            var pluginTypes = loader.LoadDefaultAssembly().GetTypes();

            IPluginAPI plugin = null;

            foreach (var pluginType in pluginTypes
                     .Where(t => typeof(IPluginAPI).IsAssignableFrom(t) && !t.IsAbstract))
            {
                // This assumes the implementation of IPlugin has a parameterless constructor
                plugin = (IPluginAPI)Activator.CreateInstance(pluginType);
                Log.Info($"Plugin '{plugin.GetPluginUniqueName()}' initialized successfully");
                plugin.PreInitialize(this);
                plugin.Initialize(_pluginHostAPI);
            }
            return(plugin);
        }
 public void RegisterIPCService(IPluginAPI plugin, dynamic service)
 {
     _ipcRouter.RegisterIPCService(plugin.GetPluginUniqueName(), service);
 }
 public dynamic GetSettings(IPluginAPI plugin)
 {
     return(_app.Config.Plugins.GetValueOrDefault(plugin.GetPluginUniqueName(), null));
 }