Exemplo n.º 1
0
        internal static ServiceConfigurations Find(Configuration config, ILogger logger)
        {
            logger.Information("Loading configuration", PluginDir);

            var configurations = new ServiceConfigurations(logger);

            AddInternalConfigurations();
            AddExternalPlugins();
            return(configurations);

            void AddInternalConfigurations()
            {
                logger.Information("Loading internal service configuration", PluginDir);

                var loader  = Factory.CreateLoader(config, logger).Result;
                var addData = new SetData(loader, logger);

                configurations.Add(new Singletons());
                configurations.Add(addData);
                if (config.EnablePrometheusMonitoring)
                {
                    configurations.Add(new ServiceConfiguration.Prometheus());
                }
                configurations.Add(new HealthCheck(addData, config.EnablePrometheusMonitoring));
                configurations.Add(new Swagger());
                configurations.Add(new ExceptionHandler());
            }

            void AddExternalPlugins()
            {
                if (!config.EnableCustomPlugins)
                {
                    return;
                }

                try
                {
                    logger.Information("Loading external plugins from {path}", PluginDir);
                    var conventions = new ConventionBuilder();
                    conventions.ForTypesDerivedFrom <IPlugin>().Export <IPlugin>().Shared();

                    var containerConfig = new ContainerConfiguration().WithAssembliesInPath(PluginDir, conventions);

                    using var container = containerConfig.CreateContainer();

                    var externalPlugins = container.GetExports <IPlugin>();
                    configurations.AddRange(externalPlugins);
                }
                catch (Exception e)
                {
                    logger.Warning(e, "Error loading plugins from {path}", PluginDir);
                }
            }
        }
Exemplo n.º 2
0
        public void AddRangeSetsLogger()
        {
            var plugin1        = Substitute.For <IPlugin>();
            var plugin2        = Substitute.For <IPlugin>();
            var logger         = Substitute.For <ILogger>();
            var configurations = new ServiceConfigurations(logger);

            configurations.AddRange(new [] { plugin1, plugin2 });

            plugin1.Logger.Should().Be(logger);
            plugin2.Logger.Should().Be(logger);
        }