/// <inheritdoc />
        public CompilationResult Compile(EnvironmentCompilationInfo environment,
                                         StructureCompilationInfo structure,
                                         IConfigurationParser parser)
        {
            _logger.LogInformation($"compiling environment '{environment.Name}' ({environment.Keys.Count} entries) " +
                                   $"and structure '{structure.Name}' ({structure.Keys.Count} entries)");

            ICompilationTracer compilationTracer = new CompilationTracer();
            var resolver = ValueResolverBuilder.CreateNew()
                           .UseEnvironment(environment)
                           .UseStructure(structure)
                           .UseLogger(_resolverLogger)
                           .UseEnvironmentKeyProvider()
                           .UseStructureVariableProvider()
                           .UseSecretProvider(_secretProvider)
                           .BuildDefault();

            var configuration = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (var(key, value) in structure.Keys)
            {
                var result = resolver.Resolve(key, value, compilationTracer.AddKey(key, value), parser).RunSync();
                if (result.IsError)
                {
                    _logger.LogWarning(result.Message);
                }

                foreach (var(rk, rv) in result.Data)
                {
                    configuration[rk] = rv;
                }
            }

            return(new CompilationResult(configuration, compilationTracer.GetResults()));
        }
 // restrict external access
 private ValueResolverBuilder()
 {
     _environment    = null;
     _structure      = null;
     _logger         = null;
     _valueProviders = new Dictionary <ConfigValueProviderType, IConfigValueProvider>();
 }
Ejemplo n.º 3
0
 public DefaultValueResolver(EnvironmentCompilationInfo environmentInfo,
                             StructureCompilationInfo structureInfo,
                             IDictionary <ConfigValueProviderType, IConfigValueProvider> valueProviders,
                             ILogger logger)
 {
     _environmentInfo = environmentInfo;
     _structureInfo   = structureInfo;
     _logger          = logger;
     _valueProviders  = valueProviders;
 }
 /// <summary>
 ///     set the current instance to use the given <see cref="StructureCompilationInfo" />
 /// </summary>
 /// <param name="structure"></param>
 /// <returns></returns>
 public ValueResolverBuilder UseStructure(StructureCompilationInfo structure)
 {
     _structure = structure ?? throw new ArgumentNullException(nameof(structure));
     return(this);
 }