aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2021-11-02 16:02:52 +0100
committerBond_009 <bond.009@outlook.com>2021-11-02 16:02:52 +0100
commit104e36f2f9c6440a7547a4c76d80a69d5af84eea (patch)
treeefabebc400bd2f3ff897116fba163a84f6758838
parent838225e962fb5931f449ed68156660703cab17c6 (diff)
Streamline startup code
-rw-r--r--Emby.Server.Implementations/ApplicationHost.cs150
-rw-r--r--Jellyfin.Server/CoreAppHost.cs49
-rw-r--r--Jellyfin.Server/Program.cs41
-rw-r--r--MediaBrowser.Common/IApplicationHost.cs4
-rw-r--r--tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs10
-rw-r--r--tests/Jellyfin.Server.Integration.Tests/TestAppHost.cs12
6 files changed, 123 insertions, 143 deletions
diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs
index 6fd152a42..512700ac2 100644
--- a/Emby.Server.Implementations/ApplicationHost.cs
+++ b/Emby.Server.Implementations/ApplicationHost.cs
@@ -147,25 +147,20 @@ namespace Emby.Server.Implementations
/// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
/// <param name="options">Instance of the <see cref="IStartupOptions"/> interface.</param>
/// <param name="startupConfig">The <see cref="IConfiguration" /> interface.</param>
- /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
- /// <param name="serviceCollection">Instance of the <see cref="IServiceCollection"/> interface.</param>
public ApplicationHost(
IServerApplicationPaths applicationPaths,
ILoggerFactory loggerFactory,
IStartupOptions options,
- IConfiguration startupConfig,
- IFileSystem fileSystem,
- IServiceCollection serviceCollection)
+ IConfiguration startupConfig)
{
ApplicationPaths = applicationPaths;
LoggerFactory = loggerFactory;
_startupOptions = options;
_startupConfig = startupConfig;
- _fileSystemManager = fileSystem;
- ServiceCollection = serviceCollection;
+ _fileSystemManager = new ManagedFileSystem(LoggerFactory.CreateLogger<ManagedFileSystem>(), applicationPaths);
Logger = LoggerFactory.CreateLogger<ApplicationHost>();
- fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
+ _fileSystemManager.AddShortcutHandler(new MbLinkShortcutHandler(_fileSystemManager));
ApplicationVersion = typeof(ApplicationHost).Assembly.GetName().Version;
ApplicationVersionString = ApplicationVersion.ToString(3);
@@ -230,8 +225,6 @@ namespace Emby.Server.Implementations
/// </summary>
protected ILogger<ApplicationHost> Logger { get; }
- protected IServiceCollection ServiceCollection { get; }
-
/// <summary>
/// Gets the logger factory.
/// </summary>
@@ -521,7 +514,7 @@ namespace Emby.Server.Implementations
}
/// <inheritdoc/>
- public void Init()
+ public void Init(IServiceCollection serviceCollection)
{
DiscoverTypes();
@@ -551,128 +544,129 @@ namespace Emby.Server.Implementations
CertificatePath = networkConfiguration.CertificatePath;
Certificate = GetCertificate(CertificatePath, networkConfiguration.CertificatePassword);
- RegisterServices();
+ RegisterServices(serviceCollection);
- _pluginManager.RegisterServices(ServiceCollection);
+ _pluginManager.RegisterServices(serviceCollection);
}
/// <summary>
/// Registers services/resources with the service collection that will be available via DI.
/// </summary>
- protected virtual void RegisterServices()
+ /// <param name="serviceCollection">Instance of the <see cref="IServiceCollection"/> interface.</param>
+ protected virtual void RegisterServices(IServiceCollection serviceCollection)
{
- ServiceCollection.AddSingleton(_startupOptions);
+ serviceCollection.AddSingleton(_startupOptions);
- ServiceCollection.AddMemoryCache();
+ serviceCollection.AddMemoryCache();
- ServiceCollection.AddSingleton<IServerConfigurationManager>(ConfigurationManager);
- ServiceCollection.AddSingleton<IConfigurationManager>(ConfigurationManager);
- ServiceCollection.AddSingleton<IApplicationHost>(this);
- ServiceCollection.AddSingleton<IPluginManager>(_pluginManager);
- ServiceCollection.AddSingleton<IApplicationPaths>(ApplicationPaths);
+ serviceCollection.AddSingleton<IServerConfigurationManager>(ConfigurationManager);
+ serviceCollection.AddSingleton<IConfigurationManager>(ConfigurationManager);
+ serviceCollection.AddSingleton<IApplicationHost>(this);
+ serviceCollection.AddSingleton<IPluginManager>(_pluginManager);
+ serviceCollection.AddSingleton<IApplicationPaths>(ApplicationPaths);
- ServiceCollection.AddSingleton(_fileSystemManager);
- ServiceCollection.AddSingleton<TmdbClientManager>();
+ serviceCollection.AddSingleton(_fileSystemManager);
+ serviceCollection.AddSingleton<TmdbClientManager>();
- ServiceCollection.AddSingleton(NetManager);
+ serviceCollection.AddSingleton(NetManager);
- ServiceCollection.AddSingleton<ITaskManager, TaskManager>();
+ serviceCollection.AddSingleton<ITaskManager, TaskManager>();
- ServiceCollection.AddSingleton(_xmlSerializer);
+ serviceCollection.AddSingleton(_xmlSerializer);
- ServiceCollection.AddSingleton<IStreamHelper, StreamHelper>();
+ serviceCollection.AddSingleton<IStreamHelper, StreamHelper>();
- ServiceCollection.AddSingleton<ICryptoProvider, CryptographyProvider>();
+ serviceCollection.AddSingleton<ICryptoProvider, CryptographyProvider>();
- ServiceCollection.AddSingleton<ISocketFactory, SocketFactory>();
+ serviceCollection.AddSingleton<ISocketFactory, SocketFactory>();
- ServiceCollection.AddSingleton<IInstallationManager, InstallationManager>();
+ serviceCollection.AddSingleton<IInstallationManager, InstallationManager>();
- ServiceCollection.AddSingleton<IZipClient, ZipClient>();
+ serviceCollection.AddSingleton<IZipClient, ZipClient>();
- ServiceCollection.AddSingleton<IServerApplicationHost>(this);
- ServiceCollection.AddSingleton<IServerApplicationPaths>(ApplicationPaths);
+ serviceCollection.AddSingleton<IServerApplicationHost>(this);
+ serviceCollection.AddSingleton<IServerApplicationPaths>(ApplicationPaths);
- ServiceCollection.AddSingleton<ILocalizationManager, LocalizationManager>();
+ serviceCollection.AddSingleton<ILocalizationManager, LocalizationManager>();
- ServiceCollection.AddSingleton<IBlurayExaminer, BdInfoExaminer>();
+ serviceCollection.AddSingleton<IBlurayExaminer, BdInfoExaminer>();
- ServiceCollection.AddSingleton<IUserDataRepository, SqliteUserDataRepository>();
- ServiceCollection.AddSingleton<IUserDataManager, UserDataManager>();
+ serviceCollection.AddSingleton<IUserDataRepository, SqliteUserDataRepository>();
+ serviceCollection.AddSingleton<IUserDataManager, UserDataManager>();
- ServiceCollection.AddSingleton<IItemRepository, SqliteItemRepository>();
+ serviceCollection.AddSingleton<IItemRepository, SqliteItemRepository>();
- ServiceCollection.AddSingleton<IMediaEncoder, MediaBrowser.MediaEncoding.Encoder.MediaEncoder>();
- ServiceCollection.AddSingleton<EncodingHelper>();
+ serviceCollection.AddSingleton<IMediaEncoder, MediaBrowser.MediaEncoding.Encoder.MediaEncoder>();
+ serviceCollection.AddSingleton<EncodingHelper>();
// TODO: Refactor to eliminate the circular dependencies here so that Lazy<T> isn't required
- ServiceCollection.AddTransient(provider => new Lazy<ILibraryMonitor>(provider.GetRequiredService<ILibraryMonitor>));
- ServiceCollection.AddTransient(provider => new Lazy<IProviderManager>(provider.GetRequiredService<IProviderManager>));
- ServiceCollection.AddTransient(provider => new Lazy<IUserViewManager>(provider.GetRequiredService<IUserViewManager>));
- ServiceCollection.AddSingleton<ILibraryManager, LibraryManager>();
+ serviceCollection.AddTransient(provider => new Lazy<ILibraryMonitor>(provider.GetRequiredService<ILibraryMonitor>));
+ serviceCollection.AddTransient(provider => new Lazy<IProviderManager>(provider.GetRequiredService<IProviderManager>));
+ serviceCollection.AddTransient(provider => new Lazy<IUserViewManager>(provider.GetRequiredService<IUserViewManager>));
+ serviceCollection.AddSingleton<ILibraryManager, LibraryManager>();
- ServiceCollection.AddSingleton<IMusicManager, MusicManager>();
+ serviceCollection.AddSingleton<IMusicManager, MusicManager>();
- ServiceCollection.AddSingleton<ILibraryMonitor, LibraryMonitor>();
+ serviceCollection.AddSingleton<ILibraryMonitor, LibraryMonitor>();
- ServiceCollection.AddSingleton<ISearchEngine, SearchEngine>();
+ serviceCollection.AddSingleton<ISearchEngine, SearchEngine>();
- ServiceCollection.AddSingleton<IWebSocketManager, WebSocketManager>();
+ serviceCollection.AddSingleton<IWebSocketManager, WebSocketManager>();
- ServiceCollection.AddSingleton<IImageProcessor, ImageProcessor>();
+ serviceCollection.AddSingleton<IImageProcessor, ImageProcessor>();
- ServiceCollection.AddSingleton<ITVSeriesManager, TVSeriesManager>();
+ serviceCollection.AddSingleton<ITVSeriesManager, TVSeriesManager>();
- ServiceCollection.AddSingleton<IMediaSourceManager, MediaSourceManager>();
+ serviceCollection.AddSingleton<IMediaSourceManager, MediaSourceManager>();
- ServiceCollection.AddSingleton<ISubtitleManager, SubtitleManager>();
+ serviceCollection.AddSingleton<ISubtitleManager, SubtitleManager>();
- ServiceCollection.AddSingleton<IProviderManager, ProviderManager>();
+ serviceCollection.AddSingleton<IProviderManager, ProviderManager>();
// TODO: Refactor to eliminate the circular dependency here so that Lazy<T> isn't required
- ServiceCollection.AddTransient(provider => new Lazy<ILiveTvManager>(provider.GetRequiredService<ILiveTvManager>));
- ServiceCollection.AddSingleton<IDtoService, DtoService>();
+ serviceCollection.AddTransient(provider => new Lazy<ILiveTvManager>(provider.GetRequiredService<ILiveTvManager>));
+ serviceCollection.AddSingleton<IDtoService, DtoService>();
- ServiceCollection.AddSingleton<IChannelManager, ChannelManager>();
+ serviceCollection.AddSingleton<IChannelManager, ChannelManager>();
- ServiceCollection.AddSingleton<ISessionManager, SessionManager>();
+ serviceCollection.AddSingleton<ISessionManager, SessionManager>();
- ServiceCollection.AddSingleton<IDlnaManager, DlnaManager>();
+ serviceCollection.AddSingleton<IDlnaManager, DlnaManager>();
- ServiceCollection.AddSingleton<ICollectionManager, CollectionManager>();
+ serviceCollection.AddSingleton<ICollectionManager, CollectionManager>();
- ServiceCollection.AddSingleton<IPlaylistManager, PlaylistManager>();
+ serviceCollection.AddSingleton<IPlaylistManager, PlaylistManager>();
- ServiceCollection.AddSingleton<ISyncPlayManager, SyncPlayManager>();
+ serviceCollection.AddSingleton<ISyncPlayManager, SyncPlayManager>();
- ServiceCollection.AddSingleton<LiveTvDtoService>();
- ServiceCollection.AddSingleton<ILiveTvManager, LiveTvManager>();
+ serviceCollection.AddSingleton<LiveTvDtoService>();
+ serviceCollection.AddSingleton<ILiveTvManager, LiveTvManager>();
- ServiceCollection.AddSingleton<IUserViewManager, UserViewManager>();
+ serviceCollection.AddSingleton<IUserViewManager, UserViewManager>();
- ServiceCollection.AddSingleton<INotificationManager, NotificationManager>();
+ serviceCollection.AddSingleton<INotificationManager, NotificationManager>();
- ServiceCollection.AddSingleton<IDeviceDiscovery, DeviceDiscovery>();
+ serviceCollection.AddSingleton<IDeviceDiscovery, DeviceDiscovery>();
- ServiceCollection.AddSingleton<IChapterManager, ChapterManager>();
+ serviceCollection.AddSingleton<IChapterManager, ChapterManager>();
- ServiceCollection.AddSingleton<IEncodingManager, MediaEncoder.EncodingManager>();
+ serviceCollection.AddSingleton<IEncodingManager, MediaEncoder.EncodingManager>();
- ServiceCollection.AddScoped<ISessionContext, SessionContext>();
+ serviceCollection.AddScoped<ISessionContext, SessionContext>();
- ServiceCollection.AddSingleton<IAuthService, AuthService>();
- ServiceCollection.AddSingleton<IQuickConnect, QuickConnectManager>();
+ serviceCollection.AddSingleton<IAuthService, AuthService>();
+ serviceCollection.AddSingleton<IQuickConnect, QuickConnectManager>();
- ServiceCollection.AddSingleton<ISubtitleEncoder, MediaBrowser.MediaEncoding.Subtitles.SubtitleEncoder>();
+ serviceCollection.AddSingleton<ISubtitleEncoder, MediaBrowser.MediaEncoding.Subtitles.SubtitleEncoder>();
- ServiceCollection.AddSingleton<IAttachmentExtractor, MediaBrowser.MediaEncoding.Attachments.AttachmentExtractor>();
+ serviceCollection.AddSingleton<IAttachmentExtractor, MediaBrowser.MediaEncoding.Attachments.AttachmentExtractor>();
- ServiceCollection.AddSingleton<TranscodingJobHelper>();
- ServiceCollection.AddScoped<MediaInfoHelper>();
- ServiceCollection.AddScoped<AudioHelper>();
- ServiceCollection.AddScoped<DynamicHlsHelper>();
+ serviceCollection.AddSingleton<TranscodingJobHelper>();
+ serviceCollection.AddScoped<MediaInfoHelper>();
+ serviceCollection.AddScoped<AudioHelper>();
+ serviceCollection.AddScoped<DynamicHlsHelper>();
- ServiceCollection.AddSingleton<IDirectoryService, DirectoryService>();
+ serviceCollection.AddSingleton<IDirectoryService, DirectoryService>();
}
/// <summary>
diff --git a/Jellyfin.Server/CoreAppHost.cs b/Jellyfin.Server/CoreAppHost.cs
index 21bd9ba01..67e50b92d 100644
--- a/Jellyfin.Server/CoreAppHost.cs
+++ b/Jellyfin.Server/CoreAppHost.cs
@@ -22,7 +22,6 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Security;
using MediaBrowser.Model.Activity;
-using MediaBrowser.Model.IO;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -42,67 +41,61 @@ namespace Jellyfin.Server
/// <param name="loggerFactory">The <see cref="ILoggerFactory" /> to be used by the <see cref="CoreAppHost" />.</param>
/// <param name="options">The <see cref="StartupOptions" /> to be used by the <see cref="CoreAppHost" />.</param>
/// <param name="startupConfig">The <see cref="IConfiguration" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="fileSystem">The <see cref="IFileSystem" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="collection">The <see cref="IServiceCollection"/> to be used by the <see cref="CoreAppHost"/>.</param>
public CoreAppHost(
IServerApplicationPaths applicationPaths,
ILoggerFactory loggerFactory,
IStartupOptions options,
- IConfiguration startupConfig,
- IFileSystem fileSystem,
- IServiceCollection collection)
+ IConfiguration startupConfig)
: base(
applicationPaths,
loggerFactory,
options,
- startupConfig,
- fileSystem,
- collection)
+ startupConfig)
{
}
/// <inheritdoc/>
- protected override void RegisterServices()
+ protected override void RegisterServices(IServiceCollection serviceCollection)
{
// Register an image encoder
bool useSkiaEncoder = SkiaEncoder.IsNativeLibAvailable();
Type imageEncoderType = useSkiaEncoder
? typeof(SkiaEncoder)
: typeof(NullImageEncoder);
- ServiceCollection.AddSingleton(typeof(IImageEncoder), imageEncoderType);
+ serviceCollection.AddSingleton(typeof(IImageEncoder), imageEncoderType);
// Log a warning if the Skia encoder could not be used
if (!useSkiaEncoder)
{
- Logger.LogWarning($"Skia not available. Will fallback to {nameof(NullImageEncoder)}.");
+ Logger.LogWarning("Skia not available. Will fallback to {ImageEncoder}.", nameof(NullImageEncoder));
}
- ServiceCollection.AddDbContextPool<JellyfinDb>(
+ serviceCollection.AddDbContextPool<JellyfinDb>(
options => options
.UseLoggerFactory(LoggerFactory)
.UseSqlite($"Filename={Path.Combine(ApplicationPaths.DataPath, "jellyfin.db")}"));
- ServiceCollection.AddEventServices();
- ServiceCollection.AddSingleton<IBaseItemManager, BaseItemManager>();
- ServiceCollection.AddSingleton<IEventManager, EventManager>();
- ServiceCollection.AddSingleton<JellyfinDbProvider>();
+ serviceCollection.AddEventServices();
+ serviceCollection.AddSingleton<IBaseItemManager, BaseItemManager>();
+ serviceCollection.AddSingleton<IEventManager, EventManager>();
+ serviceCollection.AddSingleton<JellyfinDbProvider>();
- ServiceCollection.AddSingleton<IActivityManager, ActivityManager>();
- ServiceCollection.AddSingleton<IUserManager, UserManager>();
- ServiceCollection.AddSingleton<IDisplayPreferencesManager, DisplayPreferencesManager>();
- ServiceCollection.AddSingleton<IDeviceManager, DeviceManager>();
+ serviceCollection.AddSingleton<IActivityManager, ActivityManager>();
+ serviceCollection.AddSingleton<IUserManager, UserManager>();
+ serviceCollection.AddSingleton<IDisplayPreferencesManager, DisplayPreferencesManager>();
+ serviceCollection.AddSingleton<IDeviceManager, DeviceManager>();
// TODO search the assemblies instead of adding them manually?
- ServiceCollection.AddSingleton<IWebSocketListener, SessionWebSocketListener>();
- ServiceCollection.AddSingleton<IWebSocketListener, ActivityLogWebSocketListener>();
- ServiceCollection.AddSingleton<IWebSocketListener, ScheduledTasksWebSocketListener>();
- ServiceCollection.AddSingleton<IWebSocketListener, SessionInfoWebSocketListener>();
+ serviceCollection.AddSingleton<IWebSocketListener, SessionWebSocketListener>();
+ serviceCollection.AddSingleton<IWebSocketListener, ActivityLogWebSocketListener>();
+ serviceCollection.AddSingleton<IWebSocketListener, ScheduledTasksWebSocketListener>();
+ serviceCollection.AddSingleton<IWebSocketListener, SessionInfoWebSocketListener>();
- ServiceCollection.AddSingleton<IAuthorizationContext, AuthorizationContext>();
+ serviceCollection.AddSingleton<IAuthorizationContext, AuthorizationContext>();
- ServiceCollection.AddScoped<IAuthenticationManager, AuthenticationManager>();
+ serviceCollection.AddScoped<IAuthenticationManager, AuthenticationManager>();
- base.RegisterServices();
+ base.RegisterServices(serviceCollection);
}
/// <inheritdoc />
diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs
index 45699f3af..5f848be9e 100644
--- a/Jellyfin.Server/Program.cs
+++ b/Jellyfin.Server/Program.cs
@@ -10,7 +10,6 @@ using System.Threading;
using System.Threading.Tasks;
using CommandLine;
using Emby.Server.Implementations;
-using Emby.Server.Implementations.IO;
using Jellyfin.Server.Implementations;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Net;
@@ -157,34 +156,36 @@ namespace Jellyfin.Server
ApplicationHost.LogEnvironmentInfo(_logger, appPaths);
+ // If hosting the web client, validate the client content path
+ if (startupConfig.HostWebClient())
+ {
+ string? webContentPath = appPaths.WebPath;
+ if (!Directory.Exists(webContentPath) || !Directory.EnumerateFiles(webContentPath).Any())
+ {
+ _logger.LogError(
+ "The server is expected to host the web client, but the provided content directory is either " +
+ "invalid or empty: {WebContentPath}. If you do not want to host the web client with the " +
+ "server, you may set the '--nowebclient' command line flag, or set" +
+ "'{ConfigKey}=false' in your config settings.",
+ webContentPath,
+ ConfigurationExtensions.HostWebClientKey);
+ Environment.ExitCode = 1;
+ return;
+ }
+ }
+
PerformStaticInitialization();
- var serviceCollection = new ServiceCollection();
var appHost = new CoreAppHost(
appPaths,
_loggerFactory,
options,
- startupConfig,
- new ManagedFileSystem(_loggerFactory.CreateLogger<ManagedFileSystem>(), appPaths),
- serviceCollection);
+ startupConfig);
try
{
- // If hosting the web client, validate the client content path
- if (startupConfig.HostWebClient())
- {
- string? webContentPath = appHost.ConfigurationManager.ApplicationPaths.WebPath;
- if (!Directory.Exists(webContentPath) || Directory.GetFiles(webContentPath).Length == 0)
- {
- throw new InvalidOperationException(
- "The server is expected to host the web client, but the provided content directory is either " +
- $"invalid or empty: {webContentPath}. If you do not want to host the web client with the " +
- "server, you may set the '--nowebclient' command line flag, or set" +
- $"'{ConfigurationExtensions.HostWebClientKey}=false' in your config settings.");
- }
- }
-
- appHost.Init();
+ var serviceCollection = new ServiceCollection();
+ appHost.Init(serviceCollection);
var webHost = new WebHostBuilder().ConfigureWebHostBuilder(appHost, serviceCollection, options, startupConfig, appPaths).Build();
diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs
index 192a77611..e49ab41f4 100644
--- a/MediaBrowser.Common/IApplicationHost.cs
+++ b/MediaBrowser.Common/IApplicationHost.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
namespace MediaBrowser.Common
{
@@ -137,7 +138,8 @@ namespace MediaBrowser.Common
/// <summary>
/// Initializes this instance.
/// </summary>
- void Init();
+ /// <param name="serviceCollection">Instance of the <see cref="IServiceCollection"/> interface.</param>
+ void Init(IServiceCollection serviceCollection);
/// <summary>
/// Creates the instance.
diff --git a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs
index 976e19d46..3d34a18e7 100644
--- a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs
+++ b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs
@@ -3,7 +3,6 @@ using System.Collections.Concurrent;
using System.IO;
using System.Threading;
using Emby.Server.Implementations;
-using Emby.Server.Implementations.IO;
using MediaBrowser.Common;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
@@ -67,7 +66,7 @@ namespace Jellyfin.Server.Integration.Tests
var startupConfig = Program.CreateAppConfiguration(commandLineOpts, appPaths);
ILoggerFactory loggerFactory = new SerilogLoggerFactory();
- var serviceCollection = new ServiceCollection();
+
_disposableComponents.Add(loggerFactory);
// Create the app host and initialize it
@@ -75,11 +74,10 @@ namespace Jellyfin.Server.Integration.Tests
appPaths,
loggerFactory,
commandLineOpts,
- new ConfigurationBuilder().Build(),
- new ManagedFileSystem(loggerFactory.CreateLogger<ManagedFileSystem>(), appPaths),
- serviceCollection);
+ new ConfigurationBuilder().Build());
_disposableComponents.Add(appHost);
- appHost.Init();
+ var serviceCollection = new ServiceCollection();
+ appHost.Init(serviceCollection);
// Configure the web host builder
Program.ConfigureWebHostBuilder(builder, appHost, serviceCollection, commandLineOpts, startupConfig, appPaths);
diff --git a/tests/Jellyfin.Server.Integration.Tests/TestAppHost.cs b/tests/Jellyfin.Server.Integration.Tests/TestAppHost.cs
index 0a463cfa3..bf74efa09 100644
--- a/tests/Jellyfin.Server.Integration.Tests/TestAppHost.cs
+++ b/tests/Jellyfin.Server.Integration.Tests/TestAppHost.cs
@@ -2,9 +2,7 @@ using System.Collections.Generic;
using System.Reflection;
using Emby.Server.Implementations;
using MediaBrowser.Controller;
-using MediaBrowser.Model.IO;
using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Jellyfin.Server.Integration.Tests
@@ -21,22 +19,16 @@ namespace Jellyfin.Server.Integration.Tests
/// <param name="loggerFactory">The <see cref="ILoggerFactory" /> to be used by the <see cref="CoreAppHost" />.</param>
/// <param name="options">The <see cref="StartupOptions" /> to be used by the <see cref="CoreAppHost" />.</param>
/// <param name="startup">The <see cref="IConfiguration" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="fileSystem">The <see cref="IFileSystem" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="collection">The <see cref="IServiceCollection"/> to be used by the <see cref="CoreAppHost"/>.</param>
public TestAppHost(
IServerApplicationPaths applicationPaths,
ILoggerFactory loggerFactory,
IStartupOptions options,
- IConfiguration startup,
- IFileSystem fileSystem,
- IServiceCollection collection)
+ IConfiguration startup)
: base(
applicationPaths,
loggerFactory,
options,
- startup,
- fileSystem,
- collection)
+ startup)
{
}