71 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Microsoft.Extensions.Configuration;
 | |
| using Phares.Shared;
 | |
| using System.Text.Json;
 | |
| 
 | |
| namespace View_by_Distance.Metadata.Query.Models.Binder;
 | |
| 
 | |
| public class Configuration
 | |
| {
 | |
| 
 | |
|     public string[]? IgnoreExtensions { get; set; }
 | |
|     public Property.Models.Configuration? PropertyConfiguration { get; set; }
 | |
|     public string? PersonBirthdayFormat { get; set; }
 | |
| 
 | |
|     public override string ToString()
 | |
|     {
 | |
|         string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
|     private static void PreVerify(IConfigurationRoot configurationRoot, Configuration? configuration)
 | |
|     {
 | |
|         if (configuration?.IgnoreExtensions 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())}");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static Models.Configuration Get(Configuration? configuration, Property.Models.Configuration propertyConfiguration)
 | |
|     {
 | |
|         Models.Configuration result;
 | |
|         if (configuration is null) throw new NullReferenceException(nameof(configuration));
 | |
|         if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
 | |
|         if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
 | |
|         result = new(propertyConfiguration,
 | |
|                      configuration.IgnoreExtensions,
 | |
|                      configuration.PersonBirthdayFormat);
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
|     public static Models.Configuration Get(IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, Property.Models.Configuration propertyConfiguration)
 | |
|     {
 | |
|         Models.Configuration result;
 | |
|         Configuration? configuration;
 | |
|         if (isEnvironment is null)
 | |
| #pragma warning disable IL3050, IL2026
 | |
|             configuration = configurationRoot.Get<Configuration>();
 | |
| #pragma warning restore IL3050, IL2026
 | |
|         else
 | |
|         {
 | |
|             string environmentName = IsEnvironment.GetEnvironmentName(isEnvironment);
 | |
|             string section = string.Concat(environmentName, ":", nameof(Configuration));
 | |
|             IConfigurationSection configurationSection = configurationRoot.GetSection(section);
 | |
| #pragma warning disable IL3050, IL2026
 | |
|             configuration = configurationSection.Get<Configuration>();
 | |
| #pragma warning restore IL3050, IL2026
 | |
|         }
 | |
|         PreVerify(configurationRoot, configuration);
 | |
|         result = Get(configuration, propertyConfiguration);
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
| } |