diff --git a/src/ServiceModel/ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensions.cs b/src/ServiceModel/ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensions.cs index f2cb779..341ae00 100644 --- a/src/ServiceModel/ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensions.cs +++ b/src/ServiceModel/ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensions.cs @@ -17,6 +17,23 @@ namespace Microsoft.Extensions.DependencyInjection /// public static class ServiceModelProxyBuilderExtensions { + /// + /// Configures the by customizing the used when creating the proxy. + /// + /// The . + /// A delegate to be used to configure the . + /// An instance of . + public static IServiceModelProxyBuilder Configure(this IServiceModelProxyBuilder builder, Action configuration) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + _ = configuration ?? throw new ArgumentNullException(nameof(configuration)); + + builder.Services.Configure(builder.Name, configuration); + + return builder; + } + /// /// Configures the to customize the when creating the proxy. /// @@ -29,9 +46,7 @@ public static IServiceModelProxyBuilder ConfigureServiceEndpoint(this IServiceMo _ = configuration ?? throw new ArgumentNullException(nameof(configuration)); - builder.Services.Configure(builder.Name, options => options.EndpointConfigurations.Add(configuration)); - - return builder; + return Configure(builder, options => options.EndpointConfigurations.Add(configuration)); } /// @@ -46,9 +61,7 @@ public static IServiceModelProxyBuilder SetBinding(this IServiceModelProxyBuilde _ = binding ?? throw new ArgumentNullException(nameof(binding)); - builder.Services.Configure(builder.Name, options => options.BindingFactory = _ => binding); - - return builder; + return Configure(builder, options => options.BindingFactory = _ => binding); } /// @@ -63,9 +76,7 @@ public static IServiceModelProxyBuilder SetEndpointAddress(this IServiceModelPro _ = endpoint ?? throw new ArgumentNullException(nameof(endpoint)); - builder.Services.Configure(builder.Name, options => options.EndpointAddressFactory = _ => new EndpointAddress(endpoint.ToString())); - - return builder; + return Configure(builder, options => options.EndpointAddressFactory = _ => new EndpointAddress(endpoint.ToString())); } /// diff --git a/tests/Tests.ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensionsTests.cs b/tests/Tests.ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensionsTests.cs index b0c470c..3df20e5 100644 --- a/tests/Tests.ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensionsTests.cs +++ b/tests/Tests.ServiceModel.Proxies/DependencyInjection/ServiceModelProxyBuilderExtensionsTests.cs @@ -9,6 +9,7 @@ using InsightArchitectures.Utilities.ServiceModel.Behaviors; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; +using Moq; using NUnit.Framework; namespace Tests.DependencyInjection @@ -112,6 +113,21 @@ public void ConfigureServiceEndpoint_registers_customization(IServiceModelProxyB Assert.That(options.EndpointConfigurations, Contains.Item(configuration)); } + [Test, CustomAutoData] + public void Configure_is_guarded_against_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof (ServiceModelProxyBuilderExtensions).GetMethod(nameof(ServiceModelProxyBuilderExtensions.Configure))); + + [Test, CustomAutoData] + public void Configure_registers_configuration(IServiceModelProxyBuilder builder, Action configuration) + { + builder.Configure(configuration); + + var sp = builder.Services.BuildServiceProvider(); + + var options = sp.GetRequiredService>().Get(builder.Name); + + Mock.Get(configuration).Verify(p => p(options)); + } + [Test] [CustomInlineAutoData(3, new[] { typeof(ITestClient), typeof(ITestService), typeof(TestChannelFactoryProxyWrapper) })] [CustomInlineAutoData(4, new[] { typeof(ITestClient), typeof(ITestService), typeof(TestClient), typeof(TestClientBaseProxyWrapper) })]