| File: GenericHostWebHostBuilderExtensions.cs | Web Access |
| Project: src\aspnetcore\src\Hosting\Hosting\src\Microsoft.AspNetCore.Hosting.csproj (Microsoft.AspNetCore.Hosting) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Infrastructure; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.Extensions.Hosting; /// <summary> /// Contains extensions for an <see cref="IHostBuilder"/>. /// </summary> public static class GenericHostWebHostBuilderExtensions { /// <summary> /// Adds and configures an ASP.NET Core web application. /// </summary> /// <param name="builder">The <see cref="IHostBuilder"/> to add the <see cref="IWebHostBuilder"/> to.</param> /// <param name="configure">The delegate that configures the <see cref="IWebHostBuilder"/>.</param> /// <returns>The <see cref="IHostBuilder"/>.</returns> public static IHostBuilder ConfigureWebHost(this IHostBuilder builder, Action<IWebHostBuilder> configure) { ArgumentNullException.ThrowIfNull(configure); return builder.ConfigureWebHost(configure, _ => { }); } /// <summary> /// Adds and configures an ASP.NET Core web application. /// </summary> /// <param name="builder">The <see cref="IHostBuilder"/> to add the <see cref="IWebHostBuilder"/> to.</param> /// <param name="configure">The delegate that configures the <see cref="IWebHostBuilder"/>.</param> /// <param name="configureWebHostBuilder">The delegate that configures the <see cref="WebHostBuilderOptions"/>.</param> /// <returns>The <see cref="IHostBuilder"/>.</returns> public static IHostBuilder ConfigureWebHost(this IHostBuilder builder, Action<IWebHostBuilder> configure, Action<WebHostBuilderOptions> configureWebHostBuilder) { return ConfigureWebHost( builder, static (hostBuilder, options) => new GenericWebHostBuilder(hostBuilder, options), configure, configureWebHostBuilder); } /// <summary> /// Adds and configures an ASP.NET Core web application with minimal dependencies. /// </summary> /// <param name="builder">The <see cref="IHostBuilder"/> to add the <see cref="IWebHostBuilder"/> to.</param> /// <param name="configure">The delegate that configures the <see cref="IWebHostBuilder"/>.</param> /// <param name="configureWebHostBuilder">The delegate that configures the <see cref="WebHostBuilderOptions"/>.</param> /// <returns>The <see cref="IHostBuilder"/>.</returns> public static IHostBuilder ConfigureSlimWebHost(this IHostBuilder builder, Action<IWebHostBuilder> configure, Action<WebHostBuilderOptions> configureWebHostBuilder) { return ConfigureWebHost( builder, static (hostBuilder, options) => new SlimWebHostBuilder(hostBuilder, options), configure, configureWebHostBuilder); } private static IHostBuilder ConfigureWebHost( this IHostBuilder builder, Func<IHostBuilder, WebHostBuilderOptions, IWebHostBuilder> createWebHostBuilder, Action<IWebHostBuilder> configure, Action<WebHostBuilderOptions> configureWebHostBuilder) { ArgumentNullException.ThrowIfNull(configure); ArgumentNullException.ThrowIfNull(configureWebHostBuilder); // Light up custom implementations namely ConfigureHostBuilder which throws. if (builder is ISupportsConfigureWebHost supportsConfigureWebHost) { return supportsConfigureWebHost.ConfigureWebHost(configure, configureWebHostBuilder); } var webHostBuilderOptions = new WebHostBuilderOptions(); configureWebHostBuilder(webHostBuilderOptions); var webhostBuilder = createWebHostBuilder(builder, webHostBuilderOptions); configure(webhostBuilder); builder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>()); return builder; } }