diff --git a/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs b/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs index 52c66c42e..5e3de1bcd 100644 --- a/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs +++ b/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs @@ -223,16 +223,25 @@ internal static OpenFeatureBuilder AddPolicyBasedClient(this OpenFeatureBuilder { var policy = provider.GetRequiredService>().Value; var name = policy.DefaultNameSelector(provider); - if (name == null) - { - return provider.GetRequiredService(); - } - return provider.GetRequiredKeyedService(name); + return ResolveFeatureClient(provider, name); }); return builder; } + private static IFeatureClient ResolveFeatureClient(IServiceProvider provider, string? name = null) + { + var api = provider.GetRequiredService(); + var client = api.GetClient(name); + var context = provider.GetService(); + if (context != null) + { + client.SetContext(context); + } + + return client; + } + /// /// Configures policy name options for OpenFeature using the specified options type. /// diff --git a/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs b/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs index 1a284c918..1f2662ee1 100644 --- a/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs +++ b/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs @@ -539,7 +539,7 @@ public void AddPolicyBasedClient_AddsScopedFeatureClient() Assert.NotNull(client); } - [Fact(Skip = "Bug due to https://github.com/open-feature/dotnet-sdk/issues/543")] + [Fact] public void AddPolicyBasedClient_WithNoDefaultName_AddsScopedFeatureClient() { // Arrange @@ -559,4 +559,34 @@ public void AddPolicyBasedClient_WithNoDefaultName_AddsScopedFeatureClient() var client = scope.ServiceProvider.GetService(); Assert.NotNull(client); } + + [Fact] + public void AddPolicyBasedClient_WithEvaluationContext() + { + // Arrange + _services.AddSingleton(sp => Api.Instance); + + var context = EvaluationContext.Builder() + .Set("userId", "user-123") + .Build(); + + _services.AddTransient(_ => context); + + _services.AddOptions() + .Configure(options => options.DefaultNameSelector = _ => "default-name"); + + _systemUnderTest.AddProvider("default-name", (_, key) => new NoOpFeatureProvider()); + + // Act + _systemUnderTest.AddPolicyBasedClient(); + + // Assert + using var serviceProvider = _services.BuildServiceProvider(); + using var scope = serviceProvider.CreateScope(); + var client = scope.ServiceProvider.GetService(); + Assert.NotNull(client); + + var actualContext = client.GetContext(); + Assert.Equal(context, actualContext); + } }