.NET Core 2.2 下配置中 AddJsonFile 选项的默认值是什么?

Kon*_*ten 3 c# configuration

根据一些明智的消息来源,有一种名为AddJsonFile的方法用于读取配置文件。它的签名之一允许指定optionalreloadOnChange

IConfigurationRoot config = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  .AddJsonFile("config.json", false, false)
  .Build();
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用没有明确指定的签名,我找不到有关默认值是什么的信息。我可以假设它是false,因为它是布尔值的默认值(即default(bool)false)。

但我更喜欢明确且可链接地陈述内容。

Man*_*ari 6

请参阅以下源代码:https : //github.com/aspnet/Configuration/blob/master/src/Config.Json/JsonConfigurationExtensions.cs

据此,如果您不提供参数,则它们是错误的。请注意以下方法:

        /// <summary>
        /// Adds the JSON configuration provider at <paramref name="path"/> to <paramref name="builder"/>.
        /// </summary>
        /// <param name="builder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="path">Path relative to the base path stored in 
        /// <see cref="IConfigurationBuilder.Properties"/> of <paramref name="builder"/>.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, string path)
        {
            return AddJsonFile(builder, provider: null, path: path, optional: false, reloadOnChange: false);
        }
}
Run Code Online (Sandbox Code Playgroud)

正如您之前在问题中提到的,您可以使用此方法的另一个重载来设置 reloadOnChange 值。以下是来自 MSDN 的示例代码:

public class Program
{

    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false);

                config.AddCommandLine(args);
            })
            .UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这就是让我怀疑的原因。通常,我不喜欢显式设置已经隐式默认的(为了紧凑和简洁)。但是,我看到了许多将这两个参数设置为 false 的示例,这让我想到,也许这些参数默认设置为 true,因此需要明确地进行伪造。我现在意识到这是一个在众多博客中反复复制的误导性示例。命名参数的过度规范也是如此。这不是必需的,在我看来,这令人困惑。 (2认同)