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 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
///
/// 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);
}
///