К основному содержанию
скилл CX Codex

aspire-configuration — скилл для Claude Code: конфиг Aspire

Учит AppHost переводить ресурсы Aspire в явные ключи конфигурации, чтобы код приложения не зависел от клиентов Aspire и service discovery.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Aaronontheweb/dotnet-skills --skill aspire-configuration -a claude-code
Открыть на GitHub

Что делает aspire-configuration

Скилл задаёт правило: пакеты Aspire Hosting живут только в AppHost. Ресурсы вроде Postgres или контейнера MinIO связываются с настройками приложения через WithEnvironment(...), и каждое значение попадает в конфиг явным ключом. Приложение читает только IOptions<T> или Configuration.

Зачем это нужно? Любое значение, которое AppHost подставил в dev-окружении, должно выставляться в продакшене обычной переменной окружения или файлом конфигурации, без Aspire. Поэтому непрозрачный service discovery и скрытые абстракции отпадают: их нечем заменить на боевом сервере.

Внутри — примеры для AppHost и для кода приложения, чек-лист «Do / Don’t» и раздел про feature-тoggles: переключатели держат в конфиге и прокидывают через AppHost и тестовые фикстуры. Для тестовых переопределений скилл отсылает к skills/aspire/integration-testing/SKILL.md. Если в проекте уже есть AddServiceDiscovery в приложении, это повод проверить, не придётся ли переписывать конфигурацию перед выкладкой.

Какие задачи решает

  • перевести ресурсы AppHost в явные ключи конфигурации
  • убрать пакеты Aspire client и service discovery из кода приложения
  • сделать продакшен-конфигурацию переносимой без Aspire
  • связать настройки через IOptions<T> с валидацией
  • пробросить переключатели dev/test без правок кода приложения

Примеры запросов агенту

  • Покажи, как связать Postgres из AppHost с конфигурацией приложения через явные ключи
  • Проверь, что в проекте API нет ссылок на пакеты Aspire client и service discovery
  • Добавь feature toggle для blob storage через WithEnvironment и конфиг AppHost

Как установить aspire-configuration

1Через Skills CLI (Vercel)

npx skills add Aaronontheweb/dotnet-skills --skill aspire-configuration -a claude-code

2Вручную: положить файлы

~/.claude/skills/aspire-configuration/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/aspire-configuration/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о aspire-configuration

Как установить aspire-configuration в Claude?

Выполните npx skills add Aaronontheweb/dotnet-skills --skill aspire-configuration -a claude-code. Файл скилла окажется по пути ~/.claude/skills/aspire-configuration/SKILL.md.

Что делает aspire-configuration?

Описывает, как AppHost превращает ресурсы Aspire в явные ключи конфигурации, а код приложения остаётся на IOptions<T> и Configuration без клиентов Aspire.

Нужны ли пакеты Aspire client в проекте приложения?

Нет. Скилл прямо запрещает ссылаться на Aspire client и service discovery в приложении: это забота оркестрации, её место в AppHost.

Исходный текст

SKILL.md · MIT
---
name: aspire-configuration
description: Configure Aspire AppHost to emit explicit app config via environment variables; keep app code free of Aspire clients and service discovery.
user-invocable: false
---

# Aspire Configuration

## When to Use This Skill

Use this skill when:
- Wiring AppHost resources to application configuration in Aspire-based repos
- Ensuring production configuration is transparent and portable outside of Aspire
- Avoiding Aspire client/service-discovery packages inside application code
- Designing feature toggles for dev/test without changing app code paths

---

## Core Principles

1. **AppHost owns Aspire infrastructure packages**
   - Aspire Hosting packages belong in AppHost only.
   - App projects should not reference Aspire client/service-discovery packages.

2. **Explicit configuration only**
   - AppHost must translate resource outputs into explicit config keys (env vars).
   - App code binds to `IOptions<T>` or `Configuration` only.

3. **Production parity and transparency**
   - Every value injected by AppHost must be representable in production as env vars
     or config files without Aspire.
   - Avoid opaque service discovery and implicit configuration.

---

## Configuration Flow

```
AppHost resource -> WithEnvironment(...) -> app config keys -> IOptions<T> in app
```

The AppHost is responsible for turning Aspire resources into explicit app settings.
The application never consumes Aspire clients or service discovery directly.

---

## AppHost Patterns (Explicit Mapping)

### Example: Database + Blob Storage

```csharp
// AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);

var postgres = builder.AddPostgres("postgres");
var db = postgres.AddDatabase("appdb");

var minio = builder.AddContainer("minio", "minio/minio")
    .WithArgs("server", "/data")
    .WithHttpEndpoint(targetPort: 9000, name: "http")
    .WithHttpEndpoint(targetPort: 9001, name: "console")
    .WithEnvironment("MINIO_ROOT_USER", "minioadmin")
    .WithEnvironment("MINIO_ROOT_PASSWORD", "minioadmin");

var api = builder.AddProject<Projects.MyApp_Api>("api")
    .WithReference(db, "Postgres")
    .WithEnvironment("BlobStorage__Enabled", "true")
    .WithEnvironment("BlobStorage__ServiceUrl", minio.GetEndpoint("http"))
    .WithEnvironment("BlobStorage__AccessKey", "minioadmin")
    .WithEnvironment("BlobStorage__SecretKey", "minioadmin")
    .WithEnvironment("BlobStorage__Bucket", "attachments")
    .WithEnvironment("BlobStorage__ForcePathStyle", "true");

builder.Build().Run();
```

**Key points**
- `WithReference(db, "Postgres")` sets `ConnectionStrings__Postgres` explicitly.
- Every external dependency is represented via explicit config keys.
- The API project only reads `Configuration` values.

---

## App Code Pattern (No Aspire Clients)

Application code binds to options and initializes SDKs directly. It never depends
on Aspire client packages or service discovery.

```csharp
// Api/Program.cs
builder.Services
    .AddOptions<BlobStorageOptions>()
    .BindConfiguration("BlobStorage")
    .ValidateDataAnnotations()
    .ValidateOnStart();

builder.Services.AddSingleton<IBlobStorageService>(sp =>
{
    var options = sp.GetRequiredService<IOptions<BlobStorageOptions>>().Value;
    return new S3BlobStorageService(options); // uses explicit options only
});
```

**Do not** add Aspire client packages (or `AddServiceDiscovery`) to the app.
Those are orchestration concerns and should stay in AppHost.

---

## Feature Toggles and Test Overrides

Keep toggles in config and drive them through AppHost and test fixtures. This
maintains parity between dev/test and production configuration.

```csharp
// AppHost: disable persistence in tests via config overrides
var config = builder.Configuration.GetSection("App")
    .Get<AppHostConfiguration>() ?? new AppHostConfiguration();

if (!config.UseVolumes)
{
    postgres.WithDataVolume(false);
}

api.WithEnvironment("BlobStorage__Enabled", config.EnableBlobStorage.ToString());
```

See `skills/aspire/integration-testing/SKILL.md` for patterns on passing
configuration overrides into `DistributedApplicationTestingBuilder`.

---

## Do / Don’t Checklist

**Do**
- Map every Aspire resource output to explicit configuration keys
- Use `IOptions<T>` with validation for all infrastructure settings
- Keep AppHost as the only place that references Aspire hosting packages
- Ensure any AppHost-injected value can be set in production env vars

**Don’t**
- Reference Aspire client/service-discovery packages in application projects
- Rely on opaque service discovery that cannot be mirrored in production
- Hide configuration behind Aspire-only abstractions

---

## Related Skills

- `skills/aspire/service-defaults/SKILL.md`
- `skills/aspire/integration-testing/SKILL.md`
- `skills/akka/aspire-configuration/SKILL.md`

---

## Resources

- Aspire AppHost environment configuration: https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/app-host
- Configuration in .NET: https://learn.microsoft.com/en-us/dotnet/core/extensions/configuration

© Aaronontheweb · MIT · Aaronontheweb/dotnet-skills

Похожие скиллы

Всё по теме «Бэкенд и API» →
aspire codewithmukesh Помогает настроить .NET Aspire для локального запуска сервисов, ресурсов и обнаружения сервисов. Нужен при работе с AppHost и общими настройками сервисов. CX Codex +1 2 800установок aspire-monitoring Microsoft Скилл для наблюдения за приложениями .NET Aspire: логи, трейсы, метрики, состояние ресурсов и отдельный дашборд. Помогает разобраться, что сломалось, до правок в коде. CX Codex +1 1 100установок aspireify Microsoft Скилл сканирует репозиторий, предлагает граф ресурсов и доводит AppHost до рабочего состояния. Пригодится сразу после aspire init. CX Codex +1 630установок configuration codewithmukesh Настраивает конфигурацию .NET 10 через типизированные options, проверку и разделение секретов. Пригодится при работе с appsettings и переменными окружения. CX Codex +1 2 800установок microsoft-extensions-configuration wshaddix Скилл для работы с Microsoft.Extensions.Configuration: привязка настроек к классам, валидация на старте и разбор IOptions. CX Codex +1 525установок python-configuration Seth Hobson Скилл выносит настройки Python в переменные окружения и проверяет их через типизированные параметры. Подходит для секретов и разных окружений. CX Codex 11 508установок

Из того же набора32

playwright-blazor-testing Скилл учит агента писать end-to-end тесты для Blazor Server и WebAssembly на Playwright: навигация, формы, авторизация, селекторы. CX Codex +1 537установок dotnet-local-tools Скилл объясняет, как вести локальные .NET CLI-инструменты через .config/dotnet-tools.json, чтобы у команды и в CI были одинаковые версии. CX Codex +1 526установок aspire-integration-testing Скилл для написания интеграционных тестов приложений .NET Aspire на xUnit: фикстуры, поднятие distributed application, поиск эндпоинтов. CX Codex +1 499установок mjml-email-templates Скилл учит агента собирать транзакционные письма на MJML и компилировать их в HTML, который одинаково выглядит в Outlook, Gmail и Apple Mail. CX Codex +1 492установок snapshot-testing Скилл учит агента писать снапшот-тесты на Verify: вывод сравнивается с эталонным файлом, который вы утвердили вручную. CX Codex +1 461установок skills-index-snippets Собирает компактный роутер скиллов и агентов для AGENTS.md или CLAUDE.md, чтобы ассистент вызывал нужный скилл по имени, а не по памяти. CX Codex +1 435установок playwright-ci-caching Настраивает кэширование браузеров Playwright в GitHub Actions и Azure DevOps. Устраняет лишнюю загрузку ~400MB бинарников и сокращает сборку на 1-2 минуты в .NET-проектах. CX Codex +1 434установок dotnet-devcert-trust Разбирает, почему .NET и Aspire не доверяют HTTPS-сертификату разработчика на Linux, и доводит его до системного CA-бандла. CX Codex +1 434установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой