From 7b17799b013fd8bc76a51b60d670a83901607e86 Mon Sep 17 00:00:00 2001 From: Patrick Barron Date: Wed, 11 Jan 2023 22:07:41 -0500 Subject: [PATCH] Migrate from IWebHost to IHost --- Jellyfin.Server/Program.cs | 37 ++++++++----------- Jellyfin.Server/Startup.cs | 16 +++----- .../JellyfinApplicationFactory.cs | 2 +- 3 files changed, 22 insertions(+), 33 deletions(-) diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs index 7052f4d2bf..4725005ae6 100644 --- a/Jellyfin.Server/Program.cs +++ b/Jellyfin.Server/Program.cs @@ -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 webHost = new WebHostBuilder().ConfigureWebHostBuilder(appHost, serviceCollection, options, startupConfig, appPaths).Build(); + 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(); - // 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 /// /// The builder to configure. /// The application host. - /// The application service collection. - /// The command line options passed to the application. /// The application configuration. /// The application paths. /// The configured web host builder. 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(); + .UseStartup(_ => new Startup(appHost)); } /// diff --git a/Jellyfin.Server/Startup.cs b/Jellyfin.Server/Startup.cs index 5d6a278c40..5996b3e305 100644 --- a/Jellyfin.Server/Startup.cs +++ b/Jellyfin.Server/Startup.cs @@ -35,20 +35,17 @@ namespace Jellyfin.Server /// public class Startup { - private readonly IServerConfigurationManager _serverConfigurationManager; private readonly IServerApplicationHost _serverApplicationHost; + private readonly IServerConfigurationManager _serverConfigurationManager; /// /// Initializes a new instance of the class. /// - /// The server configuration manager. - /// The server application host. - public Startup( - IServerConfigurationManager serverConfigurationManager, - IServerApplicationHost serverApplicationHost) + /// The server application host. + public Startup(CoreAppHost appHost) { - _serverConfigurationManager = serverConfigurationManager; - _serverApplicationHost = serverApplicationHost; + _serverApplicationHost = appHost; + _serverConfigurationManager = appHost.ConfigurationManager; } /// @@ -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); diff --git a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs index c38faeda17..41b2273d04 100644 --- a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs +++ b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs @@ -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); } ///