¿Qué es la clase Startup.cs de ASP.NET Core?

Estrada Web Group
Estrada Web Group
¿Qué es la clase Startup.cs de ASP.NET Core?

En este artículo, aprenderás el rol de la clase Startup en ASP.NET Core. En el artículo pasado aprendimos cómo la clase Program es responsable de crear un Web Host y configurarlo. Pero, antes de construir y ejecutar el host, la clase Program verifica la clase Startup para una configuración adicional. Invoca el método Configure & ConfigureServices de la clase. Esto nos permite configurar aún más el inicio de la aplicación, esta clase se genera automáticamente en ASP.NET Core 5 y anterior.

¿Qué es la clase Startup?

La clase Startup de ASP.NET Core (Startup.cs) es una clase simple sin heredar de nada ni implementar ninguna interfaz. Pero es donde configuramos la canalización de solicitudes y los middlewares. También configuramos los servicios y los agregamos al contenedor de inyección de dependencia. La clase debe contener el método Configure y, opcionalmente, puede contener el método ConfigureServices.

Es similar a global.asax en ASP.NET clásico.

¿Por qué usar la clase Startup?

La clase Program y Startup son los dos lugares importantes en las aplicaciones ASP.NET Core. Prácticamente toda la configuración de la App ocurre en estos dos archivos.

Clase Program para infraestructura de aplicaciones.

La clase Program configura la infraestructura de la aplicación.

La clase Program crea el Web Host al inicio. luego configura el registro, DI Container. sistema de configuración, servidor web Kestrel, integración IIS, etc. También agrega los servicios del marco al contenedor DI para que podamos usarlo. El código para la clase Program se genera automáticamente para nosotros. Y lo más probable es que sea suficiente para la mayoría de los proyectos.

La clase Startup para la aplicación.

La clase Startup es donde configuramos los componentes de la aplicación.

Creamos servicios a medida que crece nuestra aplicación. Necesitamos agregar estas clases en el contenedor DI. Además, es posible que debamos configurar y ajustar la canalización de solicitudes. La clase Startup es donde hacemos esto.

La clase Startup tiene dos funciones principales.

  1. Configura los servicios para la inyección de dependencia.
  2. Configura la canalización de solicitudes que maneja todas las solicitudes realizadas a la aplicación.

El siguiente es un ejemplo de una clase de inicio.

Clase Startup de ASP.NET Core

Una clase de inicio típica de la aplicación web ASP.NET Core

Ubicación de la clase Startup

La clase Startup se denomina convencionalmente como Startup.cs. Se encuentra en la ruta del proyecto. Su ubicación se configura en el método Main del Program.cs.

El método Main es el punto de entrada de la aplicación. Configura el WebHost, lo construye y lo ejecuta. Luego, el host recibe las solicitudes HTTP y las pasa a la canalización de solicitudes.

El WebHost llama al método UseStartup antes de construir el WebHost.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
       .UseStartup<Startup>();      //Startup class is registered here

El método UseStartup le dice al WebHost dónde buscar la clase Startup.

El nombre Startup no está codificado. Puedes crear una clase con cualquier nombre. Por ejemplo, si desea utilizar AppStartup como clase Startup, recuerda incluirlo en Program como

.UseStartup<AppStartup>()

Servicios disponibles en Startup

La clase Startup necesita la ayuda de algunos de los servicios de Framework para registrarse y crear una canalización de solicitudes. Los siguientes servicios del Framework ya están disponibles para inyección.

Servicios Objetivo
IApplicationBuilder Utilizamos este servicio para la canalización de solicitudes de aplicaciones.
IHostingEnvironment Este servicio proporciona el EnvironmentName actual, ContentRootPath, WebRootPath y el proveedor de archivos raíz web.
ILoggerFactory Proporciona un mecanismo para crear loggers.
IServiceCollection Este es un contenedor DI. Agregamos servicios a este contenedor.

 

Método Servicios disponibles
Startup Constructor IHostingEnvironment & ILoggerFactory
ConfigureServices IServiceCollection
Configure IApplicationBuilder, IHostingEnvironment & ILoggerFactory

 

Clase Startup

ConfigureServices

ConfigureServices es el método donde

  1. Configuras los servicios.
  2. Agrega los servicios en el contenedor DI.

Este método es opcional. Pero si existe, entonces es el primer método invocado por WebHost.

El método ConfigureServices espera una instancia de servicios (de tipo IServiceCollection) como argumento. La instancia de los servicios se inyecta en ConfigureService a través de Inyección de dependencia.

public void ConfigureServices(IServiceCollection services) {
}

IServiceCollection es un contenedor DI. Agregamos servicios a este contenedor. El siguiente código es un ejemplo de cómo usamos el método de extensión AddMvc() para agregar servicios relacionados con MVC a la colección IServiceCollection

services.AddMvc();

Agregar servicios al contenedor de Inyección de dependencia hará que estén disponibles para la inyección de dependencia. Eso significa que podemos inyectar esos servicios en cualquier lugar de nuestra aplicación. La inyección de dependencia es una de las nuevas características de ASP.NET Core. ASP.NET Core usa la inyección de dependencia de forma extensiva.

El siguiente ejemplo muestra un método ConfigureServices típico.

public void ConfigureServices(IServiceCollection services) {
 
  services.Configure<CookiePolicyOptions>(options =>
  {
     // This lambda determines whether user consent for non-essential cookies is needed for a given request.
     options.CheckConsentNeeded = context => true;
     options.MinimumSameSitePolicy = SameSiteMode.None;
  });
 
  services.AddMvc();
}

Configure

El método Configure es imprescindible. Se invocas después del método ConfigureServices.

El método de configuración nos permite configurar la canalización de solicitudes de ASP.NET Core. La canalización de solicitudes especifica cómo debe responder la aplicación a las solicitudes HTTP.

Los componentes que conforman la canalización de solicitudes se denominan middleware.

A continuación, se muestra un método de configuración típico. Este es el método de configuración que genera Visual Studio si eliges la plantilla de aplicación web MVC (MVC).

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }
 
      app.UseStaticFiles();
      app.UseCors("AllowAll");
      app.UseAuthentication();
 
      app.UseMvc(routes =>
        routes.MapRoute(
                   name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            });
}

El método Configure solicita una instancia de IApplicationBuilder y HostingEnvironment. El código anterior no inyecta ILoggerFactory, pero podemos hacerlo.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
}

Luego agregamos nuestros componentes de middleware a la instancia de IApplicationBuilder (aplicación).

La primera línea comprueba si estamos en un entorno de desarrollo. En caso afirmativo, registra el middleware DeveloperExceptionPage utilizando el método de extensión UseDeveloperExceptionPage

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

En las líneas siguientes, registramos tres middlewares más.

app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseAuthentication();

La última línea de código registra el MVC Middleware. Las Rutas se configuran al registrar el Middleware.

app.UseMvc(routes =>
  routes.MapRoute(
     name: "default",
     template: "{controller=Home}/{action=Index}/{id?}");
});

Resumen

La clase Startup (Startup.cs) es donde configuramos los componentes de nuestra aplicación. El método ConfigureServices opcional es donde registramos nuestros servicios para DI. El método Configure es donde configuramos la canalización de solicitudes. El método CreateDefaultBuilder luego lee la clase Startup para configurar el host web, antes de compilarlo y ejecutarlo.

Compartir artículo:

Más artículos geniales

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla