diff --git a/src/OpenFeature.Hosting/Internal/FeatureLifecycleManager.cs b/src/OpenFeature.Hosting/Internal/FeatureLifecycleManager.cs index 4d915946b..e41e32aa1 100644 --- a/src/OpenFeature.Hosting/Internal/FeatureLifecycleManager.cs +++ b/src/OpenFeature.Hosting/Internal/FeatureLifecycleManager.cs @@ -35,13 +35,7 @@ public async ValueTask EnsureInitializedAsync(CancellationToken cancellationToke await _featureApi.SetProviderAsync(name, featureProvider).ConfigureAwait(false); } - var hooks = new List(); - foreach (var hookName in options.HookNames) - { - var hook = _serviceProvider.GetRequiredKeyedService(hookName); - hooks.Add(hook); - } - + var hooks = _serviceProvider.GetServices(); _featureApi.AddHooks(hooks); var handlers = _serviceProvider.GetServices(); diff --git a/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs b/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs index 52c66c42e..e834a49dd 100644 --- a/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs +++ b/src/OpenFeature.Hosting/OpenFeatureBuilderExtensions.cs @@ -330,18 +330,16 @@ public static OpenFeatureBuilder AddHook< (this OpenFeatureBuilder builder, string hookName, Func? implementationFactory = null) where THook : Hook { - builder.Services.PostConfigure(options => options.AddHookName(hookName)); - if (implementationFactory is not null) { - builder.Services.TryAddKeyedSingleton(hookName, (serviceProvider, key) => + builder.Services.AddSingleton((serviceProvider) => { return implementationFactory(serviceProvider); }); } else { - builder.Services.TryAddKeyedSingleton(hookName); + builder.Services.AddSingleton(); } return builder; diff --git a/src/OpenFeature.Hosting/OpenFeatureOptions.cs b/src/OpenFeature.Hosting/OpenFeatureOptions.cs index 9d3dd818e..b28d5092c 100644 --- a/src/OpenFeature.Hosting/OpenFeatureOptions.cs +++ b/src/OpenFeature.Hosting/OpenFeatureOptions.cs @@ -46,16 +46,4 @@ protected internal void AddProviderName(string? name) } } } - - private readonly HashSet _hookNames = []; - - internal IReadOnlyCollection HookNames => _hookNames; - - internal void AddHookName(string name) - { - lock (_hookNames) - { - _hookNames.Add(name); - } - } } diff --git a/test/OpenFeature.Hosting.Tests/Internal/FeatureLifecycleManagerTests.cs b/test/OpenFeature.Hosting.Tests/Internal/FeatureLifecycleManagerTests.cs index 2d379fc4e..142e56259 100644 --- a/test/OpenFeature.Hosting.Tests/Internal/FeatureLifecycleManagerTests.cs +++ b/test/OpenFeature.Hosting.Tests/Internal/FeatureLifecycleManagerTests.cs @@ -70,10 +70,9 @@ public async Task EnsureInitializedAsync_AddsHooks() services.AddOptions().Configure(options => { options.AddProviderName(null); - options.AddHookName("TestHook"); }); services.AddSingleton(provider); - services.AddKeyedSingleton("TestHook", hook); + services.AddSingleton(hook); var api = Api.Instance; diff --git a/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs b/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs index 1a284c918..858b66aaa 100644 --- a/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs +++ b/test/OpenFeature.Hosting.Tests/OpenFeatureBuilderExtensionsTests.cs @@ -256,7 +256,7 @@ public void AddProvider_WithNullKey_ThrowsArgumentNullException() } [Fact] - public void AddHook_AddsHookAsKeyedService() + public void AddHook_AddsHookAsSingletonService() { // Arrange _systemUnderTest.AddHook(); @@ -264,37 +264,7 @@ public void AddHook_AddsHookAsKeyedService() var serviceProvider = _services.BuildServiceProvider(); // Act - var hook = serviceProvider.GetKeyedService("NoOpHook"); - - // Assert - Assert.NotNull(hook); - } - - [Fact] - public void AddHook_AddsHookNameToOpenFeatureOptions() - { - // Arrange - _systemUnderTest.AddHook(sp => new NoOpHook()); - - var serviceProvider = _services.BuildServiceProvider(); - - // Act - var options = serviceProvider.GetRequiredService>(); - - // Assert - Assert.Contains(options.Value.HookNames, t => t == "NoOpHook"); - } - - [Fact] - public void AddHook_WithSpecifiedNameToOpenFeatureOptions() - { - // Arrange - _systemUnderTest.AddHook("my-custom-name"); - - var serviceProvider = _services.BuildServiceProvider(); - - // Act - var hook = serviceProvider.GetKeyedService("my-custom-name"); + var hook = serviceProvider.GetRequiredService(); // Assert Assert.NotNull(hook); @@ -309,14 +279,14 @@ public void AddHook_WithSpecifiedNameAndImplementationFactory_AsKeyedService() var serviceProvider = _services.BuildServiceProvider(); // Act - var hook = serviceProvider.GetKeyedService("my-custom-name"); + var hook = serviceProvider.GetRequiredService(); // Assert Assert.NotNull(hook); } [Fact] - public void AddHook_WithInstance_AddsHookAsKeyedService() + public void AddHook_WithInstance_AddsHookAsSingletonService() { // Arrange var expectedHook = new NoOpHook(); @@ -325,7 +295,7 @@ public void AddHook_WithInstance_AddsHookAsKeyedService() var serviceProvider = _services.BuildServiceProvider(); // Act - var actualHook = serviceProvider.GetKeyedService("NoOpHook"); + var actualHook = serviceProvider.GetRequiredService(); // Assert Assert.NotNull(actualHook); @@ -333,7 +303,7 @@ public void AddHook_WithInstance_AddsHookAsKeyedService() } [Fact] - public void AddHook_WithSpecifiedNameAndInstance_AddsHookAsKeyedService() + public void AddHook_WithSpecifiedNameAndInstance_AddsHookAsSingletonService() { // Arrange var expectedHook = new NoOpHook(); @@ -342,7 +312,7 @@ public void AddHook_WithSpecifiedNameAndInstance_AddsHookAsKeyedService() var serviceProvider = _services.BuildServiceProvider(); // Act - var actualHook = serviceProvider.GetKeyedService("custom-hook"); + var actualHook = serviceProvider.GetRequiredService(); // Assert Assert.NotNull(actualHook); diff --git a/test/OpenFeature.Hosting.Tests/OpenFeatureOptionsTests.cs b/test/OpenFeature.Hosting.Tests/OpenFeatureOptionsTests.cs index d39d4059f..f64071ada 100644 --- a/test/OpenFeature.Hosting.Tests/OpenFeatureOptionsTests.cs +++ b/test/OpenFeature.Hosting.Tests/OpenFeatureOptionsTests.cs @@ -57,17 +57,4 @@ public void AddProviderName_WithSameName_OnlyRegistersNameOnce() // Assert Assert.Single(options.ProviderNames); } - - [Fact] - public void AddHookName_RegistersHookName() - { - // Arrange - var options = new OpenFeatureOptions(); - - // Act - options.AddHookName("test-hook"); - - // Assert - Assert.Single(options.HookNames); - } }