Set up Dapr resources in the AppHost
Ce contenu n’est pas encore disponible dans votre langue.
This article is the AppHost API reference for the 📦 CommunityToolkit.Aspire.Hosting.Dapr package. If you’re new to the integration, start with Get started with Dapr and Aspire. For app-side endpoint variables and SDK examples, see Connect Aspire apps to Dapr sidecars.
Installation
Section titled “Installation”aspire add CommunityToolkit.Aspire.Hosting.DaprOr add the package manually:
#:package CommunityToolkit.Aspire.Hosting.Dapr@*<PackageReference Include="CommunityToolkit.Aspire.Hosting.Dapr" Version="*" />aspire add CommunityToolkit.Aspire.Hosting.DaprThis adds the package to aspire.config.json. After aspire restore, .aspire/modules/aspire.mjs includes the Dapr APIs.
Learn more about aspire add and
aspire restore.
Add a sidecar and component resources
Section titled “Add a sidecar and component resources”Add Dapr, create state-store and pub/sub component resources, then reference the components from a sidecar:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddDapr();
var stateStore = builder.AddDaprStateStore("statestore");var pubSub = builder.AddDaprPubSub("pubsub");
builder.AddProject<Projects.Api>("api") .WithDaprSidecar(sidecar => sidecar .WithReference(stateStore) .WithReference(pubSub));
builder.Build().Run();import { createBuilder } from './.aspire/modules/aspire.mjs';
const builder = await createBuilder();
await builder.addDapr();
const stateStore = builder.addDaprStateStore('statestore');const pubSub = builder.addDaprPubSub('pubsub');
await builder .addContainer('api', 'nginx') .withEndpoint({ name: 'http', scheme: 'http', targetPort: 80 }) .configureDaprSidecar(async (sidecar) => { await sidecar.withOptions({ appId: 'api', appPort: 80, appProtocol: 'http', }); await sidecar.withReference(await stateStore); await sidecar.withReference(await pubSub); });
await builder.build().run();AddDaprStateStore and AddDaprPubSub create generic component resources. Use the generic component API when you need another Dapr component type:
var builder = DistributedApplication.CreateBuilder(args);
var binding = builder.AddDaprComponent( "outbound", "bindings.http");
builder.Build().Run();import { createBuilder } from './.aspire/modules/aspire.mjs';
const builder = await createBuilder();
const binding = builder.addDaprComponent('outbound', 'bindings.http');
await builder.build().run();Configure sidecar options
Section titled “Configure sidecar options”Use DaprSidecarOptions or its TypeScript equivalent to configure the app ID, app endpoint, Dapr endpoints, health probes, logging, metrics, component paths, and other dapr run settings:
using CommunityToolkit.Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.Api>("api") .WithDaprSidecar(new DaprSidecarOptions { AppId = "catalog-api", AppPort = 8080, AppProtocol = "http", EnableApiLogging = true, ResourcesPaths = ["./components"] });
builder.Build().Run();import { createBuilder } from './.aspire/modules/aspire.mjs';
const builder = await createBuilder();
await builder .addContainer('api', 'nginx') .withEndpoint({ name: 'http', scheme: 'http', targetPort: 80 }) .withDaprSidecar({ sidecarOptions: { appId: 'catalog-api', appPort: 80, appProtocol: 'http', enableApiLogging: true, resourcesPaths: ['./components'], }, });
await builder.build().run();Configure component metadata
Section titled “Configure component metadata”Use WithMetadata or withMetadata for static values. The hosting integration also exposes overloads for endpoint references, reference expressions, and parameters so metadata can follow Aspire-managed resources.
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddRedis("redis");var redisPassword = builder.AddParameter("redis-password", secret: true);
var stateStore = builder.AddDaprStateStore("statestore") .WithMetadata("actorStateStore", "true") .WithMetadata("redisHost", redis.GetEndpoint("tcp")) .WithMetadata("redisPassword", redisPassword.Resource);
builder.Build().Run();import { createBuilder } from './.aspire/modules/aspire.mjs';
const builder = await createBuilder();
const redis = builder .addContainer('redis', 'redis') .withEndpoint({ name: 'tcp', targetPort: 6379 });const redisEndpoint = await redis.getEndpoint('tcp');const redisPassword = await builder.addParameter('redis-password', { secret: true,});
const stateStore = builder .addDaprStateStore('statestore') .withMetadata('actorStateStore', 'true') .withMetadataEndpoint('redisHost', redisEndpoint) .withMetadataParameter('redisPassword', redisPassword);
await builder.build().run();Dashboard integration
Section titled “Dashboard integration”Each Dapr sidecar is a hidden resource named from its app resource, such as api-dapr. The Aspire dashboard displays the sidecar’s state, endpoints, logs, traces, and metrics with the rest of the application model.
Deploy to Azure Container Apps
Section titled “Deploy to Azure Container Apps”Install 📦 CommunityToolkit.Aspire.Hosting.Azure.Dapr, then enable Dapr components on the Azure Container Apps environment:
var builder = DistributedApplication.CreateBuilder(args);
var environment = builder.AddAzureContainerAppEnvironment("cae");environment.WithDaprComponents();
builder.Build().Run();import { createBuilder } from './.aspire/modules/aspire.mjs';
const builder = await createBuilder();
const environment = await builder.addAzureContainerAppEnvironment('cae');await environment.withDaprComponents();
await builder.build().run();The integration translates local Dapr component and sidecar settings into Azure Container Apps Dapr configuration during publish.