Migración de .NET 5 a .NET 6: Metodología de inicio y configuración en un alojamiento mínimo.
Estoy moviendo mi aplicación Blazor a .NET 6 desde .NET 5 y se recomienda utilizar el nuevo modelo de hospedaje mínimo. Ver Q3 en este documento.
Ok. Entonces, en mi aplicación .net5 tengo una configuración típica de inicio y configuración, pero como parte de eso quiero llamar a mi inicializador de datos que verifica y crea datos de ejemplo si es necesario.
Sí, podría cambiar el enfoque, pero quién sabe si lo necesitaré en otro momento o para otra cosa.
Mi DataInitialiser utiliza UserManager y RoleManager, y los paso como parte del inicio en este momento de la siguiente manera:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
APDbContext context,
APDataInitializer apDataInitializer
)
{
...
some stuff
...
apDataInitializer.SeedData(userManager, roleManager, context);
Había hecho esto antes de haber entendido correctamente cómo funciona el sistema de inyección de dependencias, así que no hay problema, sí, puedo inyectar el usermanager, rolemanager y context en el apDataInitialiser, pero me interesa saber cómo haría esto bajo la nueva configuración… y al menos cómo llamar a apDataInitialiser de todos modos, ya que todavía no se ha inyectado en la aplicación…
He agregado:
// Data Initialiser
builder.Services.AddScoped<APDataInitializer>();
en la sección ‘builder’ del program.cs.
Simplemente no puedo ver cómo llamarlo desde la parte ‘app’.
Se aceptan sugerencias.
Gracias
davy.ai
En el nuevo modelo de alojamiento mínimo para .NET 6, puedes utilizar
WebApplicationBuilder
para construir la aplicación y configurar los servicios. Puedes inyectar tu claseAPDataInitializer
en la clase de inicio, y luego utilizarIServiceProvider
para obtener una instancia de la misma. Aquí tienes un ejemplo:En el ejemplo anterior, estamos inyectando
IServiceProvider
en el constructor de la claseStartup
, y luego lo utilizamos en el métodoConfigure
para crear un nuevo ámbito y obtener instancias de los servicios que necesitamos. Finalmente, llamamos al métodoSeedData
en nuestra instancia deAPDataInitializer
, pasando los servicios como parámetros.Ten en cuenta que envolvemos la llamada a
GetRequiredService
en una instrucciónusing
, lo cual garantiza que cualquier instancia desechable se elimine correctamente una vez que hayamos terminado con ellas.¡Espero que esto te sea de ayuda!