diff --git a/Jellyfin.Server/Jellyfin.Server.csproj b/Jellyfin.Server/Jellyfin.Server.csproj
index 195d7f3a98..b16c566d5b 100644
--- a/Jellyfin.Server/Jellyfin.Server.csproj
+++ b/Jellyfin.Server/Jellyfin.Server.csproj
@@ -41,7 +41,7 @@
-
+
diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs
index 7052f4d2bf..1506530f0c 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,22 @@ namespace Jellyfin.Server
try
{
- var serviceCollection = new ServiceCollection();
- appHost.Init(serviceCollection);
+ var host = Host.CreateDefaultBuilder()
+ .ConfigureServices(services => 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 +284,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 +345,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..f89f81c766 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);
@@ -208,7 +204,7 @@ namespace Jellyfin.Server
endpoints.MapControllers();
if (_serverConfigurationManager.Configuration.EnableMetrics)
{
- endpoints.MapMetrics("/metrics");
+ endpoints.MapMetrics();
}
endpoints.MapHealthChecks("/health");
diff --git a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs
index c38faeda17..1bfa5996d8 100644
--- a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs
+++ b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs
@@ -8,6 +8,7 @@ using MediaBrowser.Common;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.AspNetCore.TestHost;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
@@ -78,11 +79,17 @@ namespace Jellyfin.Server.Integration.Tests
commandLineOpts,
startupConfig);
_disposableComponents.Add(appHost);
- var serviceCollection = new ServiceCollection();
- appHost.Init(serviceCollection);
- // Configure the web host builder
- Program.ConfigureWebHostBuilder(builder, appHost, serviceCollection, commandLineOpts, startupConfig, appPaths);
+ builder.ConfigureServices(services => appHost.Init(services))
+ .ConfigureWebHostBuilder(appHost, startupConfig, appPaths)
+ .ConfigureAppConfiguration((context, builder) =>
+ {
+ builder
+ .SetBasePath(appPaths.ConfigurationDirectoryPath)
+ .AddInMemoryCollection(ConfigurationOptions.DefaultConfiguration)
+ .AddEnvironmentVariables("JELLYFIN_")
+ .AddInMemoryCollection(commandLineOpts.ConvertToConfig());
+ });
}
///