コンテンツにスキップ
ドキュメントAspire を試す
ドキュメント試す

Aspire のリソースモデルでは、構造化された方法でリソースを定義および構成でき、アプリケーションコンポーネントのシームレスな統合と管理を実現できます。このガイドでは、Aspire でリソースを追加および構成するための一般的なパターンについて詳しく説明します。

Aspire は、流暢な拡張メソッドを使って リソースデータモデル動作 を分離します。

  • リソースクラスは、コンストラクターとプロパティのみを定義します。
  • 拡張メソッドは、リソースの作成、構成、実行時の配線を実装します。

このガイドでは各パターンを説明し、最後に Redis の逐語的な例 を示します。さらに、カスタムリソースを介してマニフェストを発行する方法も扱います。

AddX(...) メソッドは次を実行します:

  1. 入力を検証します(buildername、必須引数)。
  2. データのみのリソースを インスタンス化 します(new TResource(...))。
  3. builder.AddResource(resource)登録 します。
  4. エンドポイント、正常性チェック、コンテナー設定、環境変数、コマンドライン引数、イベント購読の 任意の配線 を行います。
public static IResourceBuilder<TResource> AddX(
this IDistributedApplicationBuilder builder,
[ResourceName] string name,
/* optional parameters */)
{
// 1. 入力を検証
// 2. リソースをインスタンス化
// 3. builder.AddResource(resource)
// 4. 任意の配線:
// .WithEndpoint(...)
// .WithHealthCheck(...)
// .WithImage(...)
// .WithEnvironment(...)
// .WithArgs(...)
// Eventing.Subscribe<...>(...)
}

エンドポイント:

.WithEndpoint(port: hostPort, targetPort: containerPort, name: endpointName)

正常性チェック:

.WithHealthCheck(healthCheckKey)

コンテナーイメージ / レジストリ:

.WithImage(imageName, imageTag)
.WithImageRegistry(registryUrl)

エントリポイントと引数:

.WithEntrypoint("/bin/sh")
.WithArgs(context => { /* build args */ return Task.CompletedTask; })

環境変数:

.WithEnvironment(context => new("ENV_VAR", valueProvider))

イベント購読:

builder.Eventing.Subscribe<EventType>(resource, handler);
ステップ呼び出し/メソッド目的
検証ArgumentNullException.ThrowIfNull(...)builder、name、args が非 null であることを保証する
インスタンス化new TResource(name, …)データのみのインスタンスを作成する
登録builder.AddResource(resource)リソースをアプリケーションモデルに追加する
任意の配線.WithEndpoint(…), .WithHealthCheck(…), .WithImage(…), .WithEnvironment(…), .WithArgs(…), Eventing.Subscribe(…)コンテナー詳細、配線、実行時フックを構成する

WithX(...) メソッドは、リソースビルダーに 注釈を付与 します。

public static IResourceBuilder<TResource> WithX(
this IResourceBuilder<TResource> builder,
FooOptions options) =>
builder.WithAnnotation(new FooAnnotation(options));
  • 対象: IResourceBuilder<TResource>
  • アクション: WithAnnotation(...)
  • 戻り値: IResourceBuilder<TResource>
メソッド対象アクション
WithX(...)IResourceBuilder<TResource>WithAnnotation API を使用して XAnnotation を付与します。
戻り値IResourceBuilder<TResource>流れるようなチェーンを有効にします。

注釈は、IResourceAnnotation を実装する public なメタデータ型です。実行時にはフックやイベントを通じて動的に追加または削除できます。必要に応じて、コンシューマーは TryGetLastAnnotation<T>() を使って注釈を照会できます。

public sealed record PersistenceAnnotation(
TimeSpan? Interval,
int KeysChangedThreshold) : IResourceAnnotation;
builder.WithAnnotation(new PersistenceAnnotation(
TimeSpan.FromSeconds(60),
100));
概念パターンメモ
注釈型public record XAnnotation(...) : IResourceAnnotation動的な実行時利用をサポートするため public とする。
付与builder.WithAnnotation(new XAnnotation(...))リソースビルダーにメタデータを追加する。
照会resource.TryGetLastAnnotation<XAnnotation>(out var a)コンシューマーは必要に応じて注釈を検査する。

カスタム値オブジェクトは評価を遅延し、フレームワークがリソース間の依存関係を検出できるようにします。

インターフェイスメンバーモード目的
IValueProviderValueTask<string?> GetValueAsync(CancellationToken)実行実行時にライブ値を解決する
IManifestExpressionProviderstring ValueExpression { get; }発行マニフェストで構造化式を出力する
IExpressionValueIValueProviderIManifestExpressionProvider を継承実行と発行式ベースの値が受け入れられる場所で使える値オブジェクトとしてマークする
IValueWithReferences (opt.)IEnumerable<object> References { get; }両方(必要な場合)他リソースへの依存関係を宣言する
  • すべての構造化値型で IValueProviderIManifestExpressionProvider実装 します。
  • WithEnvironment(...) などの API で構造化値型を受け入れさせたい場合は、IExpressionValue実装 します。
  • 型がリソース参照を保持する場合にのみ、IValueWithReferences実装 します。
builder.WithEnvironment(context =>
new("REDIS_CONNECTION_STRING", redis.GetConnectionStringAsync));
例: BicepOutputReference
public sealed partial class BicepOutputReference :
IManifestExpressionProvider,
IValueProvider,
IValueWithReferences
{
public string ValueExpression { get; }
public ValueTask<string?> GetValueAsync(CancellationToken cancellationToken = default);
IEnumerable<object> IValueWithReferences.References { get; }
}
public static IResourceBuilder<T> WithEnvironment<T>(
this IResourceBuilder<T> builder,
string name,
BicepOutputReference bicepOutputReference)
where T : IResourceWithEnvironment
{
return builder.WithAnnotation(
new EnvironmentVariableAnnotation(name, bicepOutputReference));
}
概念パターン目的
IValueProviderGetValueAsync(...)遅延された実行時解決
IManifestExpressionProviderValueExpression構造化された発行時式
IExpressionValueIValueProvider + IManifestExpressionProvider再利用可能な式ベースの値
IValueWithReferences (opt.)Referencesリソース依存関係を宣言する
WithEnvironment(...)new("NAME", valueProvider)構造化値をフラット化せずに付与する