public static IResourceBuilder WithReference()

in src/Aspire.Hosting.AWS/CloudFormation/CloudFormationExtensions.cs [151:188]


    public static IResourceBuilder<TDestination> WithReference<TDestination>(this IResourceBuilder<TDestination> builder, IResourceBuilder<ICloudFormationResource> cloudFormationResourceBuilder, string configSection = Constants.DefaultConfigSection)
        where TDestination : IResourceWithEnvironment, IResourceWithWaitSupport
    {
        if (!cloudFormationResourceBuilder.Resource.Annotations.Any(x => x is CloudFormationReferenceAnnotation cf && string.Equals(cf.TargetResource, builder.Resource.Name, StringComparison.Ordinal)))
        {
            cloudFormationResourceBuilder.WithAnnotation(new CloudFormationReferenceAnnotation(builder.Resource.Name));
        }

        builder.WaitFor(cloudFormationResourceBuilder);

        builder.WithEnvironment(ctx =>
        {
            if (ctx.ExecutionContext.IsPublishMode)
            {
                return;
            }

            if (cloudFormationResourceBuilder.Resource.AWSSDKConfig != null)
            {
                SdkUtilities.ApplySDKConfig(ctx, cloudFormationResourceBuilder.Resource.AWSSDKConfig, false);
            }

            if (cloudFormationResourceBuilder.Resource.Outputs == null)
            {
                return;
            }

            configSection = configSection.ToEnvironmentVariables();

            foreach (var output in cloudFormationResourceBuilder.Resource.Outputs)
            {
                var envName = $"{configSection}__{output.OutputKey}";
                ctx.EnvironmentVariables[envName] = output.OutputValue;
            }
        });

        return builder;
    }