Migrate from IWebHost to IHost

This commit is contained in:
Patrick Barron 2023-01-11 22:07:41 -05:00
parent 81c8890b6d
commit 7b17799b01
3 changed files with 22 additions and 33 deletions

View File

@ -6,7 +6,6 @@ using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Threading;
@ -21,7 +20,6 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
@ -186,20 +184,26 @@ namespace Jellyfin.Server
try
{
var serviceCollection = new ServiceCollection();
appHost.Init(serviceCollection);
var host = Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
// NOTE: Called first to ensure app host configuration is fully initialized
appHost.Init(services);
})
.ConfigureWebHostDefaults(webHostBuilder => webHostBuilder.ConfigureWebHostBuilder(appHost, startupConfig, appPaths))
.ConfigureAppConfiguration(config => config.ConfigureAppConfiguration(options, appPaths, startupConfig))
.UseSerilog()
.Build();
var webHost = new WebHostBuilder().ConfigureWebHostBuilder(appHost, serviceCollection, options, startupConfig, appPaths).Build();
// Re-use the web host service provider in the app host since ASP.NET doesn't allow a custom service collection.
appHost.ServiceProvider = webHost.Services;
// Re-use the host service provider in the app host since ASP.NET doesn't allow a custom service collection.
appHost.ServiceProvider = host.Services;
await appHost.InitializeServices().ConfigureAwait(false);
Migrations.MigrationRunner.Run(appHost, _loggerFactory);
try
{
await webHost.StartAsync(_tokenSource.Token).ConfigureAwait(false);
await host.StartAsync(_tokenSource.Token).ConfigureAwait(false);
if (!OperatingSystem.IsWindows() && startupConfig.UseUnixSocket())
{
@ -284,16 +288,12 @@ namespace Jellyfin.Server
/// </summary>
/// <param name="builder">The builder to configure.</param>
/// <param name="appHost">The application host.</param>
/// <param name="serviceCollection">The application service collection.</param>
/// <param name="commandLineOpts">The command line options passed to the application.</param>
/// <param name="startupConfig">The application configuration.</param>
/// <param name="appPaths">The application paths.</param>
/// <returns>The configured web host builder.</returns>
public static IWebHostBuilder ConfigureWebHostBuilder(
this IWebHostBuilder builder,
ApplicationHost appHost,
IServiceCollection serviceCollection,
StartupOptions commandLineOpts,
CoreAppHost appHost,
IConfiguration startupConfig,
IApplicationPaths appPaths)
{
@ -349,14 +349,7 @@ namespace Jellyfin.Server
_logger.LogInformation("Kestrel listening to unix socket {SocketPath}", socketPath);
}
})
.ConfigureAppConfiguration(config => config.ConfigureAppConfiguration(commandLineOpts, appPaths, startupConfig))
.UseSerilog()
.ConfigureServices(services =>
{
// Merge the external ServiceCollection into ASP.NET DI
services.Add(serviceCollection);
})
.UseStartup<Startup>();
.UseStartup(_ => new Startup(appHost));
}
/// <summary>

View File

@ -35,20 +35,17 @@ namespace Jellyfin.Server
/// </summary>
public class Startup
{
private readonly IServerConfigurationManager _serverConfigurationManager;
private readonly IServerApplicationHost _serverApplicationHost;
private readonly IServerConfigurationManager _serverConfigurationManager;
/// <summary>
/// Initializes a new instance of the <see cref="Startup" /> class.
/// </summary>
/// <param name="serverConfigurationManager">The server configuration manager.</param>
/// <param name="serverApplicationHost">The server application host.</param>
public Startup(
IServerConfigurationManager serverConfigurationManager,
IServerApplicationHost serverApplicationHost)
/// <param name="appHost">The server application host.</param>
public Startup(CoreAppHost appHost)
{
_serverConfigurationManager = serverConfigurationManager;
_serverApplicationHost = serverApplicationHost;
_serverApplicationHost = appHost;
_serverConfigurationManager = appHost.ConfigurationManager;
}
/// <summary>
@ -87,8 +84,7 @@ namespace Jellyfin.Server
RequestHeaderEncodingSelector = (_, _) => Encoding.UTF8
};
services
.AddHttpClient(NamedClient.Default, c =>
services.AddHttpClient(NamedClient.Default, c =>
{
c.DefaultRequestHeaders.UserAgent.Add(productHeader);
c.DefaultRequestHeaders.Accept.Add(acceptJsonHeader);

View File

@ -82,7 +82,7 @@ namespace Jellyfin.Server.Integration.Tests
appHost.Init(serviceCollection);
// Configure the web host builder
Program.ConfigureWebHostBuilder(builder, appHost, serviceCollection, commandLineOpts, startupConfig, appPaths);
Program.ConfigureWebHostBuilder(builder, appHost, startupConfig, appPaths);
}
/// <inheritdoc/>