diff --git a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs index 9583e43699..bf0275ea95 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs +++ b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs @@ -98,15 +98,6 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting Services.AddSingleton(WebAssemblyNavigationInterception.Instance); Services.AddSingleton(); Services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(WebAssemblyConsoleLogger<>))); - Services.AddSingleton(s => - { - // Creating the URI helper needs to wait until the JS Runtime is initialized, so defer it. - var navigationManager = s.GetRequiredService(); - return new HttpClient - { - BaseAddress = new Uri(navigationManager.BaseUri) - }; - }); } } } diff --git a/src/Components/WebAssembly/WebAssembly/src/Services/HttpClientServiceCollectionExtensions.cs b/src/Components/WebAssembly/WebAssembly/src/Services/HttpClientServiceCollectionExtensions.cs new file mode 100644 index 0000000000..a4c8118e3f --- /dev/null +++ b/src/Components/WebAssembly/WebAssembly/src/Services/HttpClientServiceCollectionExtensions.cs @@ -0,0 +1,31 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Net.Http; +using Microsoft.AspNetCore.Components; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class HttpClientServiceCollectionExtensions + { + /// + /// Adds a instance to the that is + /// configured to use the application's base address (). + /// + /// The . + /// The configured . + public static IServiceCollection AddBaseAddressHttpClient(this IServiceCollection serviceCollection) + { + return serviceCollection.AddSingleton(s => + { + // Creating the URI helper needs to wait until the JS Runtime is initialized, so defer it. + var navigationManager = s.GetRequiredService(); + return new HttpClient + { + BaseAddress = new Uri(navigationManager.BaseUri) + }; + }); + } + } +} diff --git a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs index b3ede8c030..13465b8493 100644 --- a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs +++ b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs @@ -80,7 +80,6 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting typeof(NavigationManager), typeof(INavigationInterception), typeof(ILoggerFactory), - typeof(HttpClient), typeof(ILogger<>), }; } diff --git a/src/Components/WebAssembly/testassets/StandaloneApp/Program.cs b/src/Components/WebAssembly/testassets/StandaloneApp/Program.cs index 4b62ad89ee..ff12347ed0 100644 --- a/src/Components/WebAssembly/testassets/StandaloneApp/Program.cs +++ b/src/Components/WebAssembly/testassets/StandaloneApp/Program.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using Microsoft.Extensions.DependencyInjection; namespace StandaloneApp { @@ -12,6 +13,7 @@ namespace StandaloneApp { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); + builder.Services.AddBaseAddressHttpClient(); await builder.Build().RunAsync(); } diff --git a/src/Components/test/testassets/BasicTestApp/Program.cs b/src/Components/test/testassets/BasicTestApp/Program.cs index b9cd628669..f72c504d8d 100644 --- a/src/Components/test/testassets/BasicTestApp/Program.cs +++ b/src/Components/test/testassets/BasicTestApp/Program.cs @@ -34,6 +34,7 @@ namespace BasicTestApp builder.RootComponents.Add("root"); + builder.Services.AddBaseAddressHttpClient(); builder.Services.AddSingleton(); builder.Services.AddAuthorizationCore(options => { diff --git a/src/ProjectTemplates/ComponentsWebAssembly.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Program.cs b/src/ProjectTemplates/ComponentsWebAssembly.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Program.cs index cc21291973..5a277e40ef 100644 --- a/src/ProjectTemplates/ComponentsWebAssembly.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Program.cs +++ b/src/ProjectTemplates/ComponentsWebAssembly.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Program.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Text; @@ -18,7 +18,7 @@ namespace ComponentsWebAssembly_CSharp var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); - // use builder.Services to configure application services. + builder.Services.AddBaseAddressHttpClient(); #if (IndividualLocalAuth) #if (Hosted) builder.Services.AddApiAuthorization();