Skip to content

Commit 542c57e

Browse files
authored
Merge pull request #13 from cnblogs/refactor-subscribe-extensions
refactor: refactor Subscribe extensions
2 parents cbd8093 + 6d8b4bc commit 542c57e

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

src/Cnblogs.Architecture.Ddd.EventBus.Dapr/EndPointExtensions.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,7 @@ public static IEndpointConventionBuilder Subscribe<TEvent>(
6363
string appName)
6464
where TEvent : IntegrationEvent
6565
{
66-
var daprOptions = builder.ServiceProvider.GetRequiredService<IOptions<DaprOptions>>().Value;
67-
EnsureDaprSubscribeHandlerMapped(builder, daprOptions);
68-
EnsureEventBusRegistered(builder, daprOptions);
66+
builder.EnsureDaprEventBus();
6967

7068
var result = builder
7169
.MapPost(route, (TEvent receivedEvent, IEventBus eventBus) => eventBus.ReceiveAsync(receivedEvent))
@@ -80,6 +78,8 @@ public static IEndpointConventionBuilder Subscribe<TEvent>(
8078
/// <param name="assemblies"><see cref="Assembly"/></param>
8179
public static void Subscribe(this IEndpointRouteBuilder builder, params Assembly[] assemblies)
8280
{
81+
builder.EnsureDaprEventBus();
82+
8383
var method = typeof(EndPointExtensions).GetMethod(
8484
nameof(Subscribe),
8585
new[] { typeof(IEndpointRouteBuilder), typeof(string) })!;
@@ -100,7 +100,7 @@ public static void Subscribe(this IEndpointRouteBuilder builder, params Assembly
100100
}
101101
}
102102

103-
private static void EnsureEventBusRegistered(IEndpointRouteBuilder builder, DaprOptions daprOptions)
103+
private static void EnsureEventBusRegistered(this IEndpointRouteBuilder builder, DaprOptions daprOptions)
104104
{
105105
if (daprOptions.IsEventBusRegistered)
106106
{
@@ -115,9 +115,10 @@ private static void EnsureEventBusRegistered(IEndpointRouteBuilder builder, Dapr
115115
}
116116

117117
daprOptions.IsEventBusRegistered = true;
118+
return;
118119
}
119120

120-
private static void EnsureDaprSubscribeHandlerMapped(IEndpointRouteBuilder builder, DaprOptions daprOptions)
121+
private static void EnsureDaprSubscribeHandlerMapped(this IEndpointRouteBuilder builder, DaprOptions daprOptions)
121122
{
122123
if (daprOptions.IsDaprSubscribeHandlerMapped)
123124
{
@@ -131,5 +132,16 @@ private static void EnsureDaprSubscribeHandlerMapped(IEndpointRouteBuilder build
131132

132133
builder.MapSubscribeHandler();
133134
daprOptions.IsDaprSubscribeHandlerMapped = true;
135+
return;
136+
}
137+
138+
private static DaprOptions GetDaprOptions(this IEndpointRouteBuilder builder)
139+
=> builder.ServiceProvider.GetRequiredService<IOptions<DaprOptions>>().Value;
140+
141+
private static void EnsureDaprEventBus(this IEndpointRouteBuilder builder)
142+
{
143+
var options = builder.GetDaprOptions();
144+
builder.EnsureDaprSubscribeHandlerMapped(options);
145+
builder.EnsureEventBusRegistered(options);
134146
}
135147
}

test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,27 @@ public async Task Dapr_SubscribeEndpoint_OkAsync()
3434
// Assert
3535
response.StatusCode.Should().Be(HttpStatusCode.OK);
3636
var responseText = await response.Content.ReadAsStringAsync();
37-
responseText.Should().Contain("pubsub");
37+
responseText.Should().Contain(nameof(TestIntegrationEvent));
38+
}
39+
40+
[Fact]
41+
public async Task Dapr_SubscribeWithoutAnyAssembly_OkAsync()
42+
{
43+
// Arrange
44+
var builder = WebApplication.CreateBuilder();
45+
builder.Services.AddDaprEventBus(nameof(DaprTests));
46+
builder.WebHost.UseTestServer();
47+
48+
var app = builder.Build();
49+
app.Subscribe();
50+
await app.StartAsync();
51+
var httpClient = app.GetTestClient();
52+
53+
// Act
54+
var response = await httpClient.GetAsync("/dapr/subscribe");
55+
56+
// Assert
57+
response.StatusCode.Should().Be(HttpStatusCode.OK);
3858
}
3959

4060
[Fact]

0 commit comments

Comments
 (0)