dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.19k stars 4.72k forks source link

[API Proposal]: Add `ConfigureHostOptions` extensions for `IHostApplicationBuilder` #90478

Open WeihanLi opened 1 year ago

WeihanLi commented 1 year ago

Background and motivation

Add ConfigureHostOptions extensions for IHostApplicationBuilder like extensions for IHostBuilder, so that we could configure the host options easily

API Proposal

namespace Microsoft.Extensions.Hosting;

public static class HostingHostApplicationBuilderExtensions
{
    public static IHostApplicationBuilder ConfigureHostOptions(this IHostApplicationBuilder hostBuilder, Action<HostOptions> configureOptions)
    {
        hostBuilder.Services.Configure(configureOptions);
        return hostBuilder;
    }

    public static IHostApplicationBuilder ConfigureHostOptions(this IHostApplicationBuilder hostBuilder, Action<IHostApplicationBuilder, HostOptions> configureOptions)
    {
        hostBuilder.Services.Configure<HostOptions>(options => configureOptions(hostBuilder, options));
        return hostBuilder;
    }
}

API Usage

var hostBuilder = Host.CreateEmptyApplicationBuilder(null);

hostBuilder.ConfigureHostOptions(x =>
  {
    x.ServicesStartConcurrently = true;
    x.ServicesStopConcurrently = true;
  });

hostBuilder.ConfigureHostOptions((hostAppBuilder, options) =>
  {
      if (TimeSpan.TryParse(hostAppBuilder.Configuration[nameof(options.StartupTimeout)], out var startupTimeout))
      {
          options.StartupTimeout = startupTimeout;
      }
  });
var host = hostBuilder.Build();
await host.RunAsync(cancellationToken);

Alternative Designs

No response

Risks

No response

ghost commented 1 year ago

Tagging subscribers to this area: @dotnet/area-extensions-hosting See info in area-owners.md if you want to be subscribed.

Issue Details
### Background and motivation Add `ConfigureHostOptions` extensions for `IHostApplicationBuilder` like extensions for `IHostBuilder`, so that we could configure the host options easily ### API Proposal ```csharp namespace Microsoft.Extensions.Hosting; public static class HostingHostApplicationBuilderExtensions { public static IHostApplicationBuilder ConfigureHostOptions(this IHostApplicationBuilder hostBuilder, Action configureOptions) { hostBuilder.Services.Configure(configureOptions); return hostBuilder; } public static IHostApplicationBuilder ConfigureHostOptions(this IHostApplicationBuilder hostBuilder, Action configureOptions) { hostBuilder.Services.Configure(options => configureOptions(hostBuilder, options)); return hostBuilder; } } ``` ### API Usage ```csharp var hostBuilder = Host.CreateEmptyApplicationBuilder(null); hostBuilder.ConfigureHostOptions(x => { x.ServicesStartConcurrently = true; x.ServicesStopConcurrently = true; }); hostBuilder.ConfigureHostOptions((hostAppBuilder, options) => { if (TimeSpan.TryParse(hostAppBuilder.Configuration[nameof(options.StartupTimeout)], out var startupTimeout)) { options.StartupTimeout = startupTimeout; } }); var host = hostBuilder.Build(); await host.RunAsync(cancellationToken); ``` ### Alternative Designs _No response_ ### Risks _No response_
Author: WeihanLi
Assignees: -
Labels: `api-suggestion`, `area-Extensions-Hosting`
Milestone: -