Esempio n. 1
0
        private void HandleExceptions(List <Task> tasks)
        {
            List <Exception> exceptions = new List <Exception>();

            for (int i = 0; i < tasks.Count; i++)
            {
                Task task = tasks[i];
                IPluginConfigurationItem plugin = _pluginConfiguration.Plugins.ElementAt(i);

                if (task.IsFaulted)
                {
                    var summary = $"An exception was thrown when starting the plugin {plugin.Description}.";
                    _logger.Write(summary, task.Exception);
                    exceptions.AddRange(task.Exception.InnerExceptions);
                }
                else if (task.IsCompleted)
                {
                    _logger.Write($"{plugin.Description} started successfully.");
                }
            }

            if (exceptions.Count > 0)
            {
                throw new AggregateException("One or more plugins failed to start. See inner exceptions for more details.",
                                             exceptions);
            }
        }
Esempio n. 2
0
        private void LogPluginInformation(IPluginConfigurationItem pluginConfiguration)
        {
            var stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("=====================================");
            stringBuilder.AppendLine($"Description: {pluginConfiguration.Description}");
            stringBuilder.AppendLine($"Assembly: {pluginConfiguration.Assembly}");
            stringBuilder.AppendLine($"Type: {pluginConfiguration.Type}");
            stringBuilder.AppendLine($"Base Directory: {pluginConfiguration.BaseDirectory}");
            stringBuilder.AppendLine($"Configuration File: {pluginConfiguration.ConfigurationFile}");
            stringBuilder.AppendLine("=====================================");
            stringBuilder.AppendLine();

            _logger.Write(stringBuilder.ToString());
        }
Esempio n. 3
0
        private PluginContext LoadPlugin(IPluginConfigurationItem pluginConfiguration)
        {
            try
            {
                string baseDirectory = pluginConfiguration.BaseDirectory;

                if (string.IsNullOrEmpty(Path.GetPathRoot(baseDirectory)) || Path.GetPathRoot(baseDirectory) == @"\")
                {
                    // Relative path. Append current directory.
                    baseDirectory = Path.Combine(_currentDirectory, baseDirectory);
                }

                if (!Directory.Exists(baseDirectory))
                {
                    throw new DirectoryNotFoundException(baseDirectory);
                }

                var appDomainSetup = new AppDomainSetup
                {
                    ApplicationBase   = baseDirectory,
                    ApplicationName   = pluginConfiguration.Description,
                    ConfigurationFile = pluginConfiguration.ConfigurationFile
                };

                var appDomain =
                    AppDomain.CreateDomain(pluginConfiguration.Description, new Evidence(), appDomainSetup);

                PluginService service = (PluginService)appDomain.CreateInstanceAndUnwrap(pluginConfiguration.Assembly,
                                                                                         pluginConfiguration.Type);

                return(new PluginContext(appDomain, service));
            }
            catch (Exception e)
            {
                var summary = $"Failed to load the plugin {pluginConfiguration.Description}.";
                _logger.Write(summary, e);
                throw;
            }
        }
Esempio n. 4
0
 public void AddConfigurationItem(IPluginConfigurationItem pluginConfigurationItem)
 {
     _pluginConfigurationItems.Add(pluginConfigurationItem);
 }