Pular para o conteúdo

AspireC4

O AspireC4 é uma biblioteca de extensão para .NET Aspire que gera automaticamente diagramas de arquitetura LikeC4 a partir do grafo de recursos do Aspire. Os diagramas são atualizados em tempo real quando os recursos iniciam, param ou apresentam erros. Cada elemento também inclui um link para a página correspondente no dashboard do Aspire.

  • Docker (necessário por padrão) — o servidor LikeC4 é executado em um contêiner auxiliar (sidecar) com a imagem ghcr.io/likec4/likec4.
  • Como alternativa, utilize .WithLocalCLI() para executar com uma CLI Node.js instalada localmente (npx, pnpm, yarn, bun ou deno).

Adicione AspireC4.Hosting ao projeto AppHost e chame AddAspireC4():

AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);
// Add your services ...
var api = builder.AddProject<Projects.MyApi>("my-api");
// Register the LikeC4 visualization sidecar.
builder.AddAspireC4();
builder.Build().Run();

Isso irá:

  1. Gerar o arquivo ./likec4/model.gen.c4 a partir do grafo de recursos do Aspire.
  2. Iniciar um contêiner Docker ghcr.io/likec4/likec4 para disponibilizar o diagrama atualizado.
  3. Monitorar alterações de estado dos recursos e regenerar o arquivo automaticamente.

Isso adiciona a extensão de hospedagem do AspireC4 ao construtor do AppHost.

AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAspireC4();
// ...add other projects/resources such as databases, services, etc.
builder
.AddProject<Projects.Web>("web")
.WithReference(db);

Integração padrão

Aspire resources
│
▼
LikeC4ModelBuilder.Build() ← resource states, dashboard URL
│
▼
LikeC4DSLGenerator.Generate()
│
▼
./likec4/model.gen.c4 ← written to disk (and Docker volume)
│
▼
ghcr.io/likec4/likec4 ← serves the diagram, hot-reloads on file change

Cada recurso do Aspire é representado por um elemento LikeC4. A cor indica o estado atual em tempo de execução:

Estado Cor Descrição
Desconhecido default Ainda não iniciado
Iniciando sky O recurso está inicializando
Em execução green Saudável e em funcionamento
Parando slate Em processo de parada (60% de opacidade)
Encerrado muted Encerrado normalmente (30% de opacidade)
Falha amber Encerrado com código diferente de zero
Erro red Foi reportado um estado de erro

Quando IncludeAspireDashboardLinks está habilitado (comportamento padrão), cada elemento LikeC4 recebe dois links:

  • Dashboard: logs de console → /consolelogs/resource/{name}
  • Dashboard: logs estruturados → /structuredlogs/resource/{name}

Os links são criados em tempo de execução quando o dashboard do Aspire atinge o estado Running. Se houver um token de acesso pelo navegador (configuração padrão do Aspire), ele será incorporado aos links para permitir a autenticação sem interrupções.

Para desabilitar os links do dashboard:

builder.AddAspireC4(options =>
{
options.IncludeAspireDashboardLinks = false;
});

Utiliza uma CLI likec4 instalada localmente (via npx/pnpm/yarn/bun/deno) em vez do contêiner Docker:

builder.AddAspireC4().WithLocalCLI();

Remove o sidecar do LikeC4 da lista de recursos do dashboard do Aspire e disponibiliza a URL do diagrama como link e comando em cada ProjectResource:

builder.AddAspireC4().WithHideFromDashboard();

Um recurso é excluído do diagrama quando:

  • Possui uma anotação ExcludeFromLikeC4Annotation; ou
  • Tem ResourceSnapshotAnnotation.InitialSnapshot.IsHidden == true (recursos internos do Aspire).

O próprio recurso sidecar do LikeC4 sempre é excluído.

  • Ferramenta de diagramas estáticos: o LikeC4 renderiza um diagrama com base em arquivo. As atualizações de estado exigem uma atualização via HMR.
  • Descoberta da URL do dashboard: se o dashboard do Aspire ainda não estiver iniciado quando o primeiro diagrama for gerado, os links só aparecerão quando ele atingir Running e acionar uma nova geração.
  • Token de acesso no arquivo gerado: o token de acesso pelo navegador do Aspire aparece no arquivo .c4, incorporado às URLs do dashboard. Não faça commit do arquivo gerado no controle de versão.
  • Relay HMR no Windows: no Windows, um relay TCP conecta a porta fixa 24678 do host à porta Docker alocada dinamicamente para Hot Module Replacement.