domingo, 11 de septiembre de 2016

Asp.Net Core: Startup

Anteriormente en NoCompila hicimos el hola mundo más pequeño posible en Asp.Net Core, más tarde explicamos qué es un middleware en Asp.Net Core y como enlazando middlewares se construye el pipeline de la aplicación.

El código de estos ejemplos es pequeño y se basa únicamente en el método de entrada de la aplicación (public static void Main). Pero a medida que crece el código y ahora que tenemos claro como funciona, vamos a comenzar a separar en clases la lógica de la aplicación.

Si creamos una aplicación Asp.Net web vacía desde el Visual Studio nos encontraremos con el siguiente método Main:

    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
	}
    }

Podemos observar como el equipo de Asp.Net aplica el principio de responsabilidad única (una clase solo tendría que tener una razón para cambiar) dejando la responsabilidad de crear el WebHost en la el método Main de la clase Program, mientras que será responsabilidad de la clase Startup configurar la aplicación web. Si nos fijamos en la línea 9, mediante el método UseStartup se le indica al WebHost que utilice la clase Startup que contiene el siguiente código:

public class Startup
{
	// This method gets called by the runtime. Use this method to add services to the container.
	// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
	public void ConfigureServices(IServiceCollection services)
	{
	}

	// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
	public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
	{
		loggerFactory.AddConsole();

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

		app.Run(async (context) =>
		{
			await context.Response.WriteAsync("Hello World!");
		});
	}
}

De la misma manera que en los post anteriores utilizábamos el delegado Configure del WebHostBuilder para configurar el pipeline de la aplicación web, aquí se utiliza método Configure de la clase Startup. En el código anterior tenemos un pipeline con un único middleware que se configura con Run.

Además, el método Configure recibe un IHostenvironment que contiene información sobre el entorno en el que estamos trabajando y un ILoggerFactory que nos permite configurar el motor de logs que trae integrado Asp.Net Core.
Otra nueva característica incluida en el Asp.Net Core es un contenedor de IoC. El método ConfigureServices de Startup se utiliza para registrar las dependencias a inyectar.

Tanto del contenedor, como los entornos y el motor de logs espero poder hablar en futuros post.

No hay comentarios:

Publicar un comentario