Start Debugging

Empezando con .NET Aspire

Una guía paso a paso para construir tu primera aplicación .NET Aspire, cubriendo la estructura del proyecto, el descubrimiento de servicios y el dashboard de Aspire.

Este artículo te guiará en la construcción de tu primera aplicación .NET Aspire. Si quieres una visión general de .NET Aspire y de lo que aporta, revisa nuestro artículo What is .NET Aspire.

Prerequisites

Hay algunas cosas que necesitas tener listas antes de empezar con .NET Aspire:

Si prefieres no usar Visual Studio, también puedes instalar .NET Aspire usando la CLI de dotnet con el comando dotnet workload install aspire. Y luego eres libre de usar el IDE que prefieras.

Para una guía completa sobre cómo instalar todos los requisitos previos de .NET Aspire, revisa How to install .NET Aspire.

Create new project

En Visual Studio, ve a File > New > Project, selecciona .NET Aspire en el desplegable de tipo de proyecto, o busca la palabra “Aspire”. Esto debería mostrar dos plantillas:

Elegiremos la plantilla .NET Aspire Starter Application para nuestra primera app .NET Aspire.

Diálogo de creación de nuevo proyecto de Visual Studio mostrando una lista filtrada de plantillas de proyecto .NET Aspire.

Dale un nombre a tu proyecto y, en el diálogo Additional information, asegúrate de habilitar la opción Use Redis for caching. Esto es totalmente opcional, pero sirve como buen ejemplo de lo que .NET Aspire puede hacer por ti.

Diálogo de información adicional para la plantilla de proyecto .NET Aspire Starter Application con la opción opcional Use Redis for caching (requiere Docker).

Using dotnet CLI

También puedes crear apps .NET Aspire usando la CLI de dotnet. Para crear una app usando la plantilla .NET Aspire Starter Application, usa el siguiente comando, reemplazando Foo con el nombre de solución que desees.

dotnet new aspire-starter --use-redis-cache --output Foo

Project structure

Con la solución .NET Aspire creada, veamos su estructura. Deberías tener 4 proyectos en tu solución:

Las dependencias entre los proyectos se ven así:

Un grafo de dependencias de proyecto para una .NET Aspire Starter Application mostrando AppHost en la parte superior, dependiente de ApiService y Web, ambos dependientes de ServiceDefaults.

Empecemos por arriba.

AppHost project

Este es nuestro proyecto orquestador de la solución .NET Aspire. Su rol es conectar y configurar los diferentes proyectos y servicios de nuestra aplicación .NET Aspire.

Veamos su archivo .csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsAspireHost>true</IsAspireHost>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Foo.ApiService\Foo.ApiService.csproj" />
    <ProjectReference Include="..\Foo.Web\Foo.Web.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Aspire.Hosting" Version="8.0.0-preview.1.23557.2" />
  </ItemGroup>

</Project>

Dos cosas destacarán:

Veamos a continuación Program.cs. Notarás un patrón builder muy familiar usado para enlazar los diferentes proyectos y habilitar el caché.

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedisContainer("cache");

var apiservice = builder.AddProject<Projects.Foo_ApiService>("apiservice");

builder.AddProject<Projects.Foo_Web>("webfrontend")
    .WithReference(cache)
    .WithReference(apiservice);

builder.Build().Run();

Lo que el código de arriba esencialmente hace es lo siguiente:

ApiService project

El proyecto ApiService expone un endpoint /weatherforecast que podemos consumir desde nuestro proyecto Web. Para hacer la API disponible para consumo, la registramos en nuestro proyecto AppHost y le dimos el nombre apiservice.

builder.AddProject<Projects.Foo_ApiService>("apiservice")

Web project

El proyecto Web representa nuestro frontend Blazor y consume el endpoint /weatherforecast expuesto por nuestro ApiService. La forma en que lo hace es donde la magia de .NET Aspire empieza a verse de verdad.

Notarás que usa un HttpClient tipado:

public class WeatherApiClient(HttpClient httpClient)
{
    public async Task<WeatherForecast[]> GetWeatherAsync()
    {
        return await httpClient.GetFromJsonAsync<WeatherForecast[]>("/weatherforecast") ?? [];
    }
}

Ahora, si miras dentro de Program.cs notarás algo interesante en la línea 14:

builder.Services.AddHttpClient<WeatherApiClient>(client =>
    client.BaseAddress = new("http://apiservice"));

¿Recuerdas cómo le dimos a nuestro proyecto ApiService el nombre apiservice cuando lo añadimos como ProjectResource en nuestra DistributedApplication? Ahora esta línea configura el WeatherApiClient tipado para usar descubrimiento de servicios y conectarse a un servicio llamado apiservice. http://apiservice se resolverá automáticamente a la dirección correcta de nuestro recurso ApiService sin ninguna configuración adicional requerida de tu parte.

ServiceDefaults project

Similar al proyecto AppHost, el proyecto compartido también se diferencia mediante una propiedad de proyecto especial:

<IsAspireSharedProject>true</IsAspireSharedProject>

El proyecto asegura que todos los diferentes proyectos y servicios estén configurados de la misma manera en lo relativo a resiliencia, descubrimiento de servicios y telemetría. Lo hace exponiendo un conjunto de métodos de extensión que pueden ser llamados por los proyectos y servicios de la solución sobre sus propias instancias de IHostApplicationBuilder.

Run the project

Para ejecutar el proyecto, asegúrate de tener AppHost configurado como tu proyecto de inicio y pulsa run (F5) en Visual Studio. Alternativamente, puedes ejecutar el proyecto desde la línea de comandos, usando dotnet run --project Foo/Foo.AppHost, reemplazando Foo con el nombre de tu proyecto.

Después de que la aplicación arranque, se te presentará el dashboard de .NET Aspire.

El dashboard de .NET Aspire ejecutando la plantilla de proyecto .NET Aspire Starter Application.

El dashboard te permite monitorear las distintas partes de tu aplicación .NET Aspire: tus proyectos, contenedores y ejecutables. También proporciona registros agregados y estructurados para tus servicios, trazas de solicitudes y otras métricas útiles.

Una traza de solicitud dentro del dashboard de .NET Aspire mostrando la solicitud en etapas a medida que pasa por los diferentes componentes de la aplicación.

Y eso es todo! Felicidades por construir y ejecutar tu primera aplicación .NET Aspire!

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Volver