diff --git a/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs b/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs index 52c66c42e..343dc9b0b 100644 --- a/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs +++ b/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs @@ -163,47 +163,35 @@ internal static OpenFeatureBuilder AddClient(this OpenFeatureBuilder builder, st { if (string.IsNullOrWhiteSpace(name)) { - if (builder.IsContextConfigured) + builder.Services.TryAddScoped(static provider => { - builder.Services.TryAddScoped(static provider => + var api = provider.GetRequiredService(); + var client = api.GetClient(); + + var context = provider.GetService(); + if (context is not null) { - var api = provider.GetRequiredService(); - var client = api.GetClient(); - var context = provider.GetRequiredService(); client.SetContext(context); - return client; - }); - } - else - { - builder.Services.TryAddScoped(static provider => - { - var api = provider.GetRequiredService(); - return api.GetClient(); - }); - } + } + + return client; + }); } else { - if (builder.IsContextConfigured) + builder.Services.TryAddKeyedScoped(name, static (provider, key) => { - builder.Services.TryAddKeyedScoped(name, static (provider, key) => + var api = provider.GetRequiredService(); + var client = api.GetClient(key!.ToString()); + + var context = provider.GetService(); + if (context is not null) { - var api = provider.GetRequiredService(); - var client = api.GetClient(key!.ToString()); - var context = provider.GetRequiredService(); client.SetContext(context); - return client; - }); - } - else - { - builder.Services.TryAddKeyedScoped(name, static (provider, key) => - { - var api = provider.GetRequiredService(); - return api.GetClient(key!.ToString()); - }); - } + } + + return client; + }); } return builder; diff --git a/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs b/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs index 1a284c918..e9afe6ad0 100644 --- a/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs +++ b/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs @@ -518,6 +518,31 @@ public void AddClient_WithNameAndContext_AddsFeatureClient() Assert.Equal("euw", region.AsString); } + [Fact] + public void AddClient_WithContextAfterAddProvider_AddsFeatureClient() + { + // Arrange + _services.AddSingleton(sp => Api.Instance); + + _systemUnderTest + .AddProvider("client-name", (_systemUnderTest, name) => new NoOpFeatureProvider()); + + // Act + _systemUnderTest + .AddClient("client-name") + .AddContext((a) => a.Set("region", "euw")); + + // Act + using var serviceProvider = _services.BuildServiceProvider(); + var client = serviceProvider.GetKeyedService("client-name"); + + Assert.NotNull(client); + + var context = client.GetContext(); + var region = context.GetValue("region"); + Assert.Equal("euw", region.AsString); + } + [Fact] public void AddPolicyBasedClient_AddsScopedFeatureClient() {