mirror of https://github.com/dapr/dotnet-sdk.git
Added overload for DaprClient DI registration (#1289)
* Added overload for DaprClient DI registration allowing the consumer to easily use values from injected services (e.g. IConfiguration). Signed-off-by: Whit Waldo <whit.waldo@innovian.net> * Added supporting unit test Signed-off-by: Whit Waldo <whit.waldo@innovian.net> --------- Signed-off-by: Whit Waldo <whit.waldo@innovian.net> Co-authored-by: Phillip Hoff <phillip@orst.edu>
This commit is contained in:
parent
fba9dfd531
commit
2e94bb1905
|
@ -31,18 +31,32 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
/// <param name="configure"></param>
|
||||
public static void AddDaprClient(this IServiceCollection services, Action<DaprClientBuilder> 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();
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds Dapr client services to the provided <see cref="IServiceCollection"/>. This does not include integration
|
||||
/// with ASP.NET Core MVC. Use the <c>AddDapr()</c> extension method on <c>IMvcBuilder</c> to register MVC integration.
|
||||
/// </summary>
|
||||
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
|
||||
/// <param name="configure"></param>
|
||||
public static void AddDaprClient(this IServiceCollection services,
|
||||
Action<IServiceProvider, DaprClientBuilder> configure)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services, nameof(services));
|
||||
|
||||
services.TryAddSingleton(serviceProvider =>
|
||||
{
|
||||
var builder = new DaprClientBuilder();
|
||||
configure?.Invoke(serviceProvider, builder);
|
||||
|
||||
return builder.Build();
|
||||
});
|
||||
|
|
|
@ -48,6 +48,31 @@ namespace Dapr.AspNetCore.Test
|
|||
Assert.True(daprClient.JsonSerializerOptions.PropertyNameCaseInsensitive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddDaprClient_RegistersUsingDependencyFromIServiceProvider()
|
||||
{
|
||||
|
||||
var services = new ServiceCollection();
|
||||
services.AddSingleton<TestConfigurationProvider>();
|
||||
services.AddDaprClient((provider, builder) =>
|
||||
{
|
||||
var configProvider = provider.GetRequiredService<TestConfigurationProvider>();
|
||||
var caseSensitivity = configProvider.GetCaseSensitivity();
|
||||
|
||||
builder.UseJsonSerializationOptions(new JsonSerializerOptions
|
||||
{
|
||||
PropertyNameCaseInsensitive = caseSensitivity
|
||||
});
|
||||
});
|
||||
|
||||
var serviceProvider = services.BuildServiceProvider();
|
||||
|
||||
DaprClientGrpc client = serviceProvider.GetRequiredService<DaprClient>() 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 @@ namespace Dapr.AspNetCore.Test
|
|||
Assert.NotNull(daprClient);
|
||||
}
|
||||
#endif
|
||||
|
||||
private class TestConfigurationProvider
|
||||
{
|
||||
public bool GetCaseSensitivity() => false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue