Mike Phares 6f52566fc2 Dynamic 5 and 14 point copy
AppSettings alignment with other projects

_TestContextTestName over _TestContext
2025-05-02 15:22:18 -07:00

81 lines
3.4 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
namespace OI.Metrology.Wafer.Counter.Models;
public record AppSettings(string AzureDevOpsDestinationDirectory,
string BuildNumber,
string Company,
string EcCharacterizationSi,
string EcMesaFileShareCharacterizationSi,
string GitCommitSeven,
bool IsDevelopment,
bool IsStaging,
string MockRoot,
string MonAResource,
string MonASite,
string URLs,
string WaferCounterDestinationDirectory,
int WaferCounterTwoFileSecondsWait,
string WorkingDirectoryName)
{
public override string ToString()
{
string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
return result;
}
private static void Verify(AppSettings appSettings)
{
if (string.IsNullOrEmpty(appSettings.Company))
throw new Exception("Company name must have a value!");
if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
throw new Exception("Working directory name must have a value!");
}
public static AppSettings Get(IConfigurationRoot configurationRoot)
{
AppSettings result;
AppSettings? appSettings = configurationRoot.GetSection(nameof(AppSettings)).Get<AppSettings>();
#pragma warning restore IL3050, IL2026
if (appSettings is null
|| appSettings?.Company is null)
{
List<string> paths = [];
foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers)
{
if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider)
continue;
if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider)
continue;
paths.Add(physicalFileProvider.Root);
}
throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}");
}
result = new(appSettings.AzureDevOpsDestinationDirectory,
appSettings.BuildNumber,
appSettings.Company,
appSettings.EcCharacterizationSi,
appSettings.EcMesaFileShareCharacterizationSi,
appSettings.GitCommitSeven,
appSettings.IsDevelopment,
appSettings.IsStaging,
appSettings.MockRoot,
appSettings.MonAResource,
appSettings.MonASite,
appSettings.URLs,
appSettings.WaferCounterDestinationDirectory,
appSettings.WaferCounterTwoFileSecondsWait,
appSettings.WorkingDirectoryName);
Verify(result);
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
public partial class AppSettingsSourceGenerationContext : JsonSerializerContext
{
}