69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
|
|
using Microsoft.Extensions.Configuration;
|
|
using NetEscapades.Configuration.Yaml;
|
|
using System;
|
|
|
|
namespace StellaOps.Configuration;
|
|
|
|
public static partial class StellaOpsConfigurationBootstrapper
|
|
{
|
|
public static StellaOpsConfigurationContext<TOptions> Build<TOptions>(
|
|
Action<StellaOpsBootstrapOptions<TOptions>>? configure = null)
|
|
where TOptions : class, new()
|
|
{
|
|
var bootstrapOptions = new StellaOpsBootstrapOptions<TOptions>();
|
|
configure?.Invoke(bootstrapOptions);
|
|
|
|
var configurationOptions = bootstrapOptions.ConfigurationOptions;
|
|
var builder = new ConfigurationBuilder();
|
|
|
|
if (!string.IsNullOrWhiteSpace(configurationOptions.BasePath))
|
|
{
|
|
builder.SetBasePath(configurationOptions.BasePath!);
|
|
}
|
|
|
|
if (configurationOptions.IncludeJsonFiles)
|
|
{
|
|
foreach (var file in configurationOptions.JsonFiles)
|
|
{
|
|
builder.AddJsonFile(file.Path, optional: file.Optional, reloadOnChange: file.ReloadOnChange);
|
|
}
|
|
}
|
|
|
|
if (configurationOptions.IncludeYamlFiles)
|
|
{
|
|
foreach (var file in configurationOptions.YamlFiles)
|
|
{
|
|
builder.AddYamlFile(file.Path, optional: file.Optional);
|
|
}
|
|
}
|
|
|
|
configurationOptions.ConfigureBuilder?.Invoke(builder);
|
|
|
|
if (configurationOptions.IncludeEnvironmentVariables)
|
|
{
|
|
builder.AddEnvironmentVariables(configurationOptions.EnvironmentPrefix);
|
|
}
|
|
|
|
var configuration = builder.Build();
|
|
|
|
IConfiguration bindingSource;
|
|
if (string.IsNullOrWhiteSpace(configurationOptions.BindingSection))
|
|
{
|
|
bindingSource = configuration;
|
|
}
|
|
else
|
|
{
|
|
bindingSource = configuration.GetSection(configurationOptions.BindingSection!);
|
|
}
|
|
|
|
var options = new TOptions();
|
|
bindingSource.Bind(options);
|
|
|
|
bootstrapOptions.PostBind?.Invoke(options, configuration);
|
|
|
|
return new StellaOpsConfigurationContext<TOptions>(configuration, options);
|
|
}
|
|
|
|
}
|