Saltar al contenido

¿Cómo agregar un archivo appsettings.json a mi configuración de Azure Function 3.0?

El tutorial o código que encontrarás en este artículo es la resolución más fácil y efectiva que encontramos a tu duda o problema.

Solución:

La solución de Nkosi funciona bastante bien, pero actualiza la forma en que el tiempo de ejecución de la función Azure carga la configuración por sí mismo, reemplazando el singleton de IConfiguration: services.AddSingleton.

Prefiero tener otro IConfigurationRoot que no se inyecte. Solo necesito inyectar mi configuración IOption que están vinculados a mi propio IConfigurationRoot.

Construyo otro IConfigurationRoot que es miembro de la clase Startup:

public class Startup : FunctionsStartup

    private IConfigurationRoot _functionConfig = null;

    private IConfigurationRoot FunctionConfig( string appDir ) => 
        _functionConfig ??= new ConfigurationBuilder()
            .AddJsonFile(Path.Combine(appDir, "appsettings.json"), optional: true, reloadOnChange: true)
            .Build();

    public override void Configure(IFunctionsHostBuilder builder)
    
         builder.Services.AddOptions()
             .Configure>((mlSettings, exeContext) =>
                 FunctionConfig(exeContext.Value.AppDirectory).GetSection("MachineLearningSettings").Bind(mlSettings) );
    

Nota: las cadenas de conexión deben permanecer en la configuración de la aplicación, ya que los activadores las requieren para crear una instancia de la aplicación de función que no se inicia (en un plan de servicio de consumo).

En Azure Functions v3 puede usar el appsettings.json patrón de configuración de ASP.NET-Core con el ConfigureAppConfiguration llame abajo (referencia).

Además, cambie la forma en que agrega sus opciones usando el código dentro del Configure método a continuación. no deberías estar pasando IConfiguration a IServiceProvider.Configure<>(). Esto le permitirá utilizar una inyección IOptions objeto.

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;

[assembly: FunctionsStartup(typeof(Startup))]

namespace MyAzureFunction

    public class Startup : FunctionsStartup
    
        public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
        
            if (builder == null) throw new ArgumentNullException(nameof(builder));

            var context = builder.GetContext();

            builder.ConfigurationBuilder
                .AddAppsettingsFile(context)
                .AddAppsettingsFile(context, useEnvironment: true)
                .AddEnvironmentVariables();
        

        public override void Configure(IFunctionsHostBuilder builder)
        
            if (builder == null) throw new ArgumentNullException(nameof(builder));

            var configuration = builder.GetContext().Configuration;

            builder.Services.Configure(options =>
            
                configuration.GetSection("MachineLearningConfig").bind(options);
            );
        
    

    public static class ConfigurationBuilderExtensions
    
        public static IConfigurationBuilder AddAppsettingsFile(
            this IConfigurationBuilder configurationBuilder,
            FunctionsHostBuilderContext context,
            bool useEnvironment = false
        )
        
            if (context == null) throw new ArgumentNullException(nameof(context));

            var environmentSection = string.Empty;

            if (useEnvironment)
            
                environmentSection = $".context.EnvironmentName";
            

            configurationBuilder.AddJsonFile(
                path: Path.Combine(context.ApplicationRootPath, $"appsettingsenvironmentSection.json"),
                optional: true,
                reloadOnChange: false);

            return configurationBuilder;
        
    

En la clase de inicio:

    IConfigurationRoot config = new ConfigurationBuilder()
              .SetBasePath(Environment.CurrentDirectory)
              .AddJsonFile("someSettings.json", optional: true, reloadOnChange: true)
              .AddEnvironmentVariables()
              .Build();

Agregue un archivo json a su proyecto que contenga la configuración. Tenga en cuenta que local.settings.json se ignora/elimina durante la implementación. (Nombre el archivo de otra manera).

Recuerda que puedes difundir este tutorial si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *