
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.
- Configura los servicios para la inyección de dependencia.
- 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.
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
- Configuras los servicios.
- 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.