public PluginLoader(ILoadablePlugin loadableView, Action <PluginLoader> onSelection) { PluginName = loadableView.PresentationName; PluginLogo = loadableView.Logo as UIElement; ViewPlugin = loadableView.View; OnSelect = new UiCommand(delegate { onSelection(this); }); }
private void LoadRegisterPlugin(string pluginPath) { try { var assembly = Assembly.LoadFrom(pluginPath); Type[] types = assembly.GetTypes(); foreach (var type in types) { // dbConfig = get configuration from database // if(dbConfig == null) // //This plugin was never configured. // 1. Retrieve initial configuration from plugin. // 2. Save configuration in DB so someone can go to the application and fill outvalues for this plugin. // else // //This plugin was configured - maybe do some test or check a field set to true in DB // 1. Pass configuration to the plugin // 2. Save plugin to _loadedPlugins. // // DONE if (type.Name.Equals(WellKnownData.PluginInfoClassName) && type.IsClass) { _logger.Information($"Loading plugin from path {pluginPath}."); var plugin = (ILoadablePlugin)Activator.CreateInstance(type); var name = plugin.Name; var description = plugin.Description; plugin.SetLogger(_logger); _logger.Information($"Successfully loaded plugin {name} : {description}."); Dictionary <string, string> configuration = null; ILoadablePlugin pluginInstance = plugin; var pluginInfo = _configurationRepository.GetPluginByName(name); if (!_loadedPlugins.ContainsKey(name)) { _loadedPlugins.Add(name, pluginInstance); } else { //If an instance of the plugin was already found, then use the existing instance. pluginInstance = _loadedPlugins[name]; } if (pluginInfo == null) { pluginInfo = new Plugin() { Name = name, Description = description }; pluginInfo.Configuration = pluginInstance.GetPluginInitialConfiguration(); _configurationRepository.SavePluginConfiguration(pluginInfo); _logger.Information($"Discovered new unconfigured plugin {Path.GetFileName(pluginPath)}."); } else { configuration = pluginInfo.Configuration; if (configuration != null) { pluginInstance.SetPluginConfiguration(configuration); } } } } } catch (Exception ex) { _logger.Error($"Failed to load plugin {Path.GetFileName(pluginPath)}: {ex.Message}."); } }