tutorial tag net mvc entre ejemplos diferencias asp c# asp.net-core startup

c# - tag - Código de inicio de la aplicación en ASP.NET Core



web forms c# ejemplos (2)

Básicamente, existen dos puntos de entrada para dicho código personalizado en el momento del inicio.

1.) Método Main

Como una aplicación de ASP.NET Core tiene el método Main antiguo y bueno como punto de entrada, puede colocar el código antes del inicio de ASP.NET Core, como

public class Program { public static void Main(string[] args) { // call custom startup logic here AppInitializer.Startup(); var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); } }

2.) Usa tu clase de Startup

Como ya ha indicado en su pregunta, Configure y ConfigureServices un buen lugar para su código personalizado.

Preferiría la clase de Startup . Desde la perspectiva del tiempo de ejecución no importa, si la llamada se llama en el inicio o en otro lugar antes de la llamada host.Run() . Pero desde el punto de vista de un programador que está acostumbrado al marco ASP.NET, su primera búsqueda de tal lógica sería el archivo Startup.cs . Todas las muestras y plantillas ponen allí la lógica de Identidad, inicialización de Entity Framework, etc. Así que como una convención recomiendo colocar las cosas de inicialización allí.

Al leer la documentación de ASP.NET Core , se distinguen dos métodos para el Inicio: Configurar y Configurar Servicios.

Ninguno de estos parecía ser un buen lugar para colocar código personalizado que me gustaría ejecutar al inicio. Quizás quiera agregar un campo personalizado a mi base de datos si no existe, buscar un archivo específico, agregar algunos datos a mi base de datos, etc. Código que deseo ejecutar una vez, solo al inicio de la aplicación.

¿Existe un enfoque preferido / recomendado para hacer esto?


Estoy de acuerdo con la OP.

Mi situación es que quiero registrar un microservicio con un registro de servicios pero no tengo forma de saber cuál es el punto final hasta que el microservicio se esté ejecutando.

Creo que los métodos de configuración y de configuración de servicios no son ideales porque ninguno de los dos estaba diseñado para llevar a cabo este tipo de procesamiento.

Otro escenario sería querer calentar los cachés, lo que, de nuevo, es algo que deberíamos hacer.

Hay varias alternativas a la respuesta aceptada:

  • Cree otra aplicación que realice las actualizaciones fuera de su sitio web, como una herramienta de implementación, que aplique las actualizaciones de la base de datos mediante programación antes de iniciar el sitio web.

  • En su clase de inicio, use un constructor estático para asegurarse de que el sitio web esté listo para comenzar

Actualizar

Lo mejor que puedo hacer en mi opinión es utilizar la interfaz IApplicationLifetime de la siguiente manera:

public class Startup { public void Configure(IApplicationLifetime lifetime) { lifetime.ApplicationStarted.Register(OnApplicationStarted); } public void OnApplicationStarted() { // Carry out your initialisation. } }