From 59b202005a96c2e9328097628e6926da0d02be6c Mon Sep 17 00:00:00 2001 From: Elvis Nieves Miranda Date: Mon, 25 Aug 2025 20:16:22 -0400 Subject: [PATCH] feat(dapr): add WaitFor support for Dapr sidecar resources MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements IResourceWithWaitSupport for IDaprSidecarResource to enable proper service startup sequencing. This allows Dapr sidecars to wait for dependent services (like Redis for pubsub) to be ready before starting, preventing component loading failures during application startup. Fixes #604 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/Shared/Dapr/Core/IDaprSidecarResource.cs | 2 +- .../WithDaprSidecarTests.cs | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Shared/Dapr/Core/IDaprSidecarResource.cs b/src/Shared/Dapr/Core/IDaprSidecarResource.cs index 8c084236..b611323f 100644 --- a/src/Shared/Dapr/Core/IDaprSidecarResource.cs +++ b/src/Shared/Dapr/Core/IDaprSidecarResource.cs @@ -8,6 +8,6 @@ namespace CommunityToolkit.Aspire.Hosting.Dapr; /// /// Represents a Dapr sidecar resource. /// -public interface IDaprSidecarResource : IResource +public interface IDaprSidecarResource : IResource, IResourceWithWaitSupport { } diff --git a/tests/CommunityToolkit.Aspire.Hosting.Dapr.Tests/WithDaprSidecarTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Dapr.Tests/WithDaprSidecarTests.cs index ce9ce838..0156c49d 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Dapr.Tests/WithDaprSidecarTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Dapr.Tests/WithDaprSidecarTests.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Hosting; +using Aspire.Hosting.ApplicationModel; namespace CommunityToolkit.Aspire.Hosting.Dapr.Tests; @@ -60,4 +61,29 @@ public void OptionsCanBeConfiguredUsingCallback() Assert.Equal("appId", annotation.Options.AppId); } + + [Fact] + public void DaprSidecarSupportsWaitFor() + { + var builder = DistributedApplication.CreateBuilder(); + + builder.AddProject("service-a") + .WithDaprSidecar(); + + var sidecarResource = Assert.Single(builder.Resources.OfType()); + + // Verify that IDaprSidecarResource implements IResourceWithWaitSupport + Assert.IsAssignableFrom(sidecarResource); + + // Create a resource builder and use it with WaitFor + var sidecarResourceBuilder = builder.CreateResourceBuilder(sidecarResource); + + var serviceB = builder.AddProject("service-b") + .WaitFor(sidecarResourceBuilder); + + // Verify the wait annotation was added + Assert.NotNull(serviceB); + var waitAnnotation = Assert.Single(serviceB.Resource.Annotations.OfType()); + Assert.Equal(sidecarResource.Name, waitAnnotation.Resource.Name); + } }