Esempio n. 1
0
        /// <summary>
        /// Add json file settings based on current environment and the specified
        /// environment inheritance layers.
        /// If environments param is null, only appsettings.json will be added.
        /// </summary>
        /// <param name="configBuilder">config builder</param>
        /// <param name="environments">array of defined environments</param>
        /// <returns>config builder</returns>
        private static IConfigurationBuilder AddJsonFiles(
            this IConfigurationBuilder configBuilder,
            IEnumerable <HostEnvironment> environments)
        {
            var currentEnvName = HostEnvironment.Environment;

            // Try to look the current environment up from the given environment list
            var env = environments?.FirstOrDefault(e => string.Equals(e.Name, currentEnvName, StringComparison.OrdinalIgnoreCase));

            if (env == null)
            {
                // If the current environment cannot be found from the environments list, we fall back to
                // the .net core behavior by creating a temp environment using current environment's name.
                env = new HostEnvironment(currentEnvName);
            }

            // Find the layering hierarchy (sigle direction list from children to parent), then reverse it (parent to children).
            var layers = new List <HostEnvironment>();

            while (env != null)
            {
                layers.Add(env);
                env = env.Parent;
            }

            layers.Reverse();

            // Add json files based on parent to child chains. Note appsettings.json is always included first.
            configBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false);
            foreach (var environment in layers)
            {
                configBuilder.AddJsonFile($"appsettings.{environment.Name}.json", optional: true, reloadOnChange: false);
            }

            return(configBuilder);
        }
Esempio n. 2
0
 /// <summary>
 /// Initializes a new Environment object
 /// </summary>
 /// <param name="name">environment name which is set in IHostEnvironment</param>
 /// <param name="parent">Parent environment, can be null and defaults to null</param>
 public HostEnvironment(string name, HostEnvironment parent = null)
 {
     this.Name   = name ?? throw new ArgumentNullException(nameof(name));
     this.Parent = parent;
 }