En versiones anteriores, teníamos la clase Startup.cs y obteníamos el objeto de configuración de la siguiente manera en el archivo de inicio .
public class Startup { private readonly IHostEnvironment environment; private readonly IConfiguration config; public Startup(IConfiguration configuration, IHostEnvironment environment) { this.config = configuration; this.environment = environment; } public void ConfigureServices(IServiceCollection services) { // Add Services } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // Add Middlewares } }Ahora en .NET 6 (con Visual Studio 2022), no vemos la clase Startup.cs . Parece que sus días están contados. Entonces, ¿cómo obtenemos estos objetos como Configuración (IConfiguración) y Entorno de alojamiento (IHostEnvironment)?
¿Cómo obtenemos estos objetos, por ejemplo, leer la configuración de appsettings? Actualmente, el archivo Program.cs tiene este aspecto.
using Festify.Database; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddDbContext<FestifyContext>(); //////////////////////////////////////////////// // The following is Giving me error as Configuration // object is not avaible, I dont know how to inject this here. //////////////////////////////////////////////// builder.Services.AddDbContext<FestifyContext>(opt => opt.UseSqlServer( Configuration.GetConnectionString("Festify"))); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();Quiero saber cómo leer la configuración de appsettings.json.
Todo lo que necesita es agregar "constructor". antes de su configuración
Me gusta:
builder.Services.AddDbContext<FestifyContext>(opt =>opt.UseSqlServer(builder.Configuration.GetConnectionString("Festify")));Los siguientes códigos me funcionaron:
Programa.cs:
var builder = WebApplication.CreateBuilder(args); string connString = builder.Configuration.GetConnectionString("conStr"); ConnectionString = connString; ... partial class Program { public static string? ConnectionString { get; private set; } } calling class: string cnStr = Program.ConnectionString;En Program.cs , WebApplicationBuilder se crea como se muestra a continuación.
var builder = WebApplication.CreateBuilder(args);Una vez que tenemos el constructor creado, la configuración está disponible.
Supongamos que tiene el appSettings.json predeterminado en su lugar. El siguiente código de ejemplo devolvería la configuración del nivel de registro predeterminado del archivo de configuración JSON.
builder.Configuration["Logging:LogLevel:Default"] // returns "Warning"Una vez que la aplicación se está ejecutando, puede acceder a los ajustes de Configuración a través de la inserción de dependencias en otras clases de su aplicación.
public MyClass(IConfiguration configuration) { var logLevel = configuration["Logging:LogLevel:Default"]; } Una buena característica que vale la pena considerar es crear una clase que represente su configuración y luego vincular la configuración a una instancia de ese tipo de clase. Por ejemplo, supongamos que crea una nueva clase llamada MyAppSettings con la misma estructura que su appSettings.json , puede hacer lo siguiente:
var myAppSettings = builder.Configuration.Get<MyAppSettings>(); string logLevel = myAppSettings.Logging.LogLevel.Default;Esto funcionó para mí ---
// Read in from JSON file builder.Services.Configure<ConnectionKeys>(builder.Configuration.GetSection("ConnectionKeys"));.NET 6 ya proporciona un objeto de construcción en Program.cs
var builder = WebApplication.CreateBuilder(args);Simplemente use este generador para acceder a la configuración y el entorno como ejemplo para obtener ConnectionString de app.settings.cs de la siguiente manera:
builder.Services.AddDbContext<DataContext>( options => { options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnectiion")); });WebApplicationBuilder devuelto por WebApplication.CreateBuilder(args) expone las propiedades de Configuration y Environment :
var builder = WebApplication.CreateBuilder(args); // Add services to the container. ... ConfigurationManager configuration = builder.Configuration; IWebHostEnvironment environment = builder.Environment; La aplicación web devuelta por WebApplication WebApplicationBuilder.Build() también expone la Configuration y el Environment :
var app = builder.Build(); IConfiguration configuration = app.Configuration; IWebHostEnvironment environment = app.Environment;Consulte también la guía de migración y los ejemplos de código .