/// <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>(); }
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); }