| File: FileConfigurationExtensions.cs | Web Access |
| Project: src\runtime\src\libraries\Microsoft.Extensions.Configuration.FileExtensions\src\Microsoft.Extensions.Configuration.FileExtensions.csproj (Microsoft.Extensions.Configuration.FileExtensions) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.Extensions.FileProviders; namespace Microsoft.Extensions.Configuration { /// <summary> /// Provides extension methods for <see cref="FileConfigurationProvider"/>. /// </summary> public static class FileConfigurationExtensions { private const string FileProviderKey = "FileProvider"; private const string FileLoadExceptionHandlerKey = "FileLoadExceptionHandler"; /// <summary> /// Sets the default <see cref="IFileProvider"/> to be used for file-based providers. /// </summary> /// <param name="builder">The <see cref="IConfigurationBuilder"/> to add to.</param> /// <param name="fileProvider">The default file provider instance.</param> /// <returns>The <see cref="IConfigurationBuilder"/>.</returns> public static IConfigurationBuilder SetFileProvider(this IConfigurationBuilder builder, IFileProvider fileProvider) { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(fileProvider); builder.Properties[FileProviderKey] = fileProvider; return builder; } /// <summary> /// Gets the default <see cref="IFileProvider"/> to be used for file-based providers. /// </summary> /// <param name="builder">The <see cref="IConfigurationBuilder"/>.</param> /// <returns>The default <see cref="IFileProvider"/>.</returns> public static IFileProvider GetFileProvider(this IConfigurationBuilder builder) { ArgumentNullException.ThrowIfNull(builder); if (builder.Properties.TryGetValue(FileProviderKey, out object? provider)) { return (IFileProvider)provider; } return new PhysicalFileProvider(AppContext.BaseDirectory ?? string.Empty); } /// <summary> /// Sets the FileProvider for file-based providers to a PhysicalFileProvider with the base path. /// </summary> /// <param name="builder">The <see cref="IConfigurationBuilder"/> to add to.</param> /// <param name="basePath">The absolute path of file-based providers.</param> /// <returns>The <see cref="IConfigurationBuilder"/>.</returns> public static IConfigurationBuilder SetBasePath(this IConfigurationBuilder builder, string basePath) { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(basePath); return builder.SetFileProvider(new PhysicalFileProvider(basePath)); } /// <summary> /// Sets a default action to be invoked for file-based providers when an error occurs. /// </summary> /// <param name="builder">The <see cref="IConfigurationBuilder"/> to add to.</param> /// <param name="handler">The Action to be invoked on a file load exception.</param> /// <returns>The <see cref="IConfigurationBuilder"/>.</returns> public static IConfigurationBuilder SetFileLoadExceptionHandler(this IConfigurationBuilder builder, Action<FileLoadExceptionContext> handler) { ArgumentNullException.ThrowIfNull(builder); builder.Properties[FileLoadExceptionHandlerKey] = handler; return builder; } /// <summary> /// Gets a default action to be invoked for file-based providers when an error occurs. /// </summary> /// <param name="builder">The <see cref="IConfigurationBuilder"/>.</param> /// <returns>The The Action to be invoked on a file load exception, if set.</returns> public static Action<FileLoadExceptionContext>? GetFileLoadExceptionHandler(this IConfigurationBuilder builder) { ArgumentNullException.ThrowIfNull(builder); if (builder.Properties.TryGetValue(FileLoadExceptionHandlerKey, out object? handler)) { return handler as Action<FileLoadExceptionContext>; } return null; } } }