diff --git a/src/Dapr.AspNetCore/DaprServiceCollectionExtensions.cs b/src/Dapr.AspNetCore/DaprServiceCollectionExtensions.cs
index 8491cb9b2..388015b80 100644
--- a/src/Dapr.AspNetCore/DaprServiceCollectionExtensions.cs
+++ b/src/Dapr.AspNetCore/DaprServiceCollectionExtensions.cs
@@ -31,18 +31,32 @@ public static class DaprServiceCollectionExtensions
///
public static void AddDaprClient(this IServiceCollection services, Action configure = null)
{
- if (services is null)
- {
- throw new ArgumentNullException(nameof(services));
- }
+ ArgumentNullException.ThrowIfNull(services, nameof(services));
services.TryAddSingleton(_ =>
{
var builder = new DaprClientBuilder();
- if (configure != null)
- {
- configure.Invoke(builder);
- }
+ configure?.Invoke(builder);
+
+ return builder.Build();
+ });
+ }
+
+ ///
+ /// Adds Dapr client services to the provided . This does not include integration
+ /// with ASP.NET Core MVC. Use the AddDapr() extension method on IMvcBuilder to register MVC integration.
+ ///
+ /// The .
+ ///
+ public static void AddDaprClient(this IServiceCollection services,
+ Action configure)
+ {
+ ArgumentNullException.ThrowIfNull(services, nameof(services));
+
+ services.TryAddSingleton(serviceProvider =>
+ {
+ var builder = new DaprClientBuilder();
+ configure?.Invoke(serviceProvider, builder);
return builder.Build();
});
diff --git a/test/Dapr.AspNetCore.Test/DaprServiceCollectionExtensionsTest.cs b/test/Dapr.AspNetCore.Test/DaprServiceCollectionExtensionsTest.cs
index 614faf5e4..a82948cf3 100644
--- a/test/Dapr.AspNetCore.Test/DaprServiceCollectionExtensionsTest.cs
+++ b/test/Dapr.AspNetCore.Test/DaprServiceCollectionExtensionsTest.cs
@@ -48,6 +48,31 @@ public void AddDaprClient_RegistersDaprClientOnlyOnce()
Assert.True(daprClient.JsonSerializerOptions.PropertyNameCaseInsensitive);
}
+ [Fact]
+ public void AddDaprClient_RegistersUsingDependencyFromIServiceProvider()
+ {
+
+ var services = new ServiceCollection();
+ services.AddSingleton();
+ services.AddDaprClient((provider, builder) =>
+ {
+ var configProvider = provider.GetRequiredService();
+ var caseSensitivity = configProvider.GetCaseSensitivity();
+
+ builder.UseJsonSerializationOptions(new JsonSerializerOptions
+ {
+ PropertyNameCaseInsensitive = caseSensitivity
+ });
+ });
+
+ var serviceProvider = services.BuildServiceProvider();
+
+ DaprClientGrpc client = serviceProvider.GetRequiredService() as DaprClientGrpc;
+
+ //Registers with case-insensitive as true by default, but we set as false above
+ Assert.False(client.JsonSerializerOptions.PropertyNameCaseInsensitive);
+ }
+
#if NET8_0_OR_GREATER
[Fact]
public void AddDaprClient_WithKeyedServices()
@@ -65,5 +90,10 @@ public void AddDaprClient_WithKeyedServices()
Assert.NotNull(daprClient);
}
#endif
+
+ private class TestConfigurationProvider
+ {
+ public bool GetCaseSensitivity() => false;
+ }
}
}