public AnabasisConfiguration(IConfigurationRoot configurationRoot, AnabasisEnvironment anabasisEnvironment, AppConfigurationOptions appConfigurationOptions, GroupConfigurationOptions groupConfigurationOptions)
 {
     ConfigurationRoot         = configurationRoot;
     AnabasisEnvironment       = anabasisEnvironment;
     AppConfigurationOptions   = appConfigurationOptions;
     GroupConfigurationOptions = groupConfigurationOptions;
 }
        public static AnabasisConfiguration GetConfigurations(Action <ConfigurationBuilder>?configureConfigurationBuilder = null, DirectoryInfo?rootDirectory = null)
        {
            rootDirectory ??= new DirectoryInfo(Directory.GetCurrentDirectory());

            var environment = Environment.GetEnvironmentVariable(AspNetCoreEnvironment);

            var anabasisEnvironment = AnabasisEnvironment.Development;

            if (null != environment && Enum.TryParse <AnabasisEnvironment>(environment, out var result))
            {
                anabasisEnvironment = result;
            }

            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddEnvironmentVariables();

            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, BaseAppConfigurationFile), false, false);
            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, GetAppConfigurationOverrideFile(anabasisEnvironment)), true, false);

            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, BaseGroupConfigurationFileTemplate), true, false);
            configurationBuilder.AddJsonFile(Path.Combine(rootDirectory.FullName, GetGroupConfigurationOverrideFile(anabasisEnvironment)), true, false);

            configureConfigurationBuilder?.Invoke(configurationBuilder);

            var configurationRoot = configurationBuilder.Build();

            var appConfigurationOptions = new AppConfigurationOptions();

            configurationRoot.GetSection(nameof(AppConfigurationOptions)).Bind(appConfigurationOptions);

            appConfigurationOptions.Validate();

            var groupConfigurationOptions = new GroupConfigurationOptions();

            configurationRoot.GetSection(nameof(GroupConfigurationOptions)).Bind(groupConfigurationOptions);

            groupConfigurationOptions.Validate();

            var anabasisConfiguration = new AnabasisConfiguration(
                configurationRoot,
                anabasisEnvironment,
                appConfigurationOptions,
                groupConfigurationOptions);

            return(anabasisConfiguration);
        }