浏览代码

Register and construct ILocalizationManager correctly

Mark Monteiro 5 年之前
父节点
当前提交
5d648bf54f

+ 17 - 16
Emby.Server.Implementations/ApplicationHost.cs

@@ -245,8 +245,6 @@ namespace Emby.Server.Implementations
         /// <value>The server configuration manager.</value>
         public IServerConfigurationManager ServerConfigurationManager => (IServerConfigurationManager)ConfigurationManager;
 
-        public LocalizationManager LocalizationManager { get; set; }
-
         /// <summary>
         /// Gets the installation manager.
         /// </summary>
@@ -629,9 +627,7 @@ namespace Emby.Server.Implementations
 
             serviceCollection.AddSingleton(ServerConfigurationManager);
 
-            LocalizationManager = new LocalizationManager(ServerConfigurationManager, JsonSerializer, LoggerFactory.CreateLogger<LocalizationManager>());
-            await LocalizationManager.LoadAll().ConfigureAwait(false);
-            serviceCollection.AddSingleton<ILocalizationManager>(LocalizationManager);
+            serviceCollection.AddSingleton<ILocalizationManager, LocalizationManager>();
 
             serviceCollection.AddSingleton<IBlurayExaminer, BdInfoExaminer>();
 
@@ -651,15 +647,16 @@ namespace Emby.Server.Implementations
             serviceCollection.AddSingleton<IUserManager, UserManager>();
 
             // TODO: Add StartupOptions.FFmpegPath to IConfiguration so this doesn't need to be constructed manually
-            serviceCollection.AddSingleton<IMediaEncoder>(new MediaBrowser.MediaEncoding.Encoder.MediaEncoder(
-                LoggerFactory.CreateLogger<MediaBrowser.MediaEncoding.Encoder.MediaEncoder>(),
-                ServerConfigurationManager,
-                FileSystemManager,
-                ProcessFactory,
-                LocalizationManager,
-                Resolve<ISubtitleEncoder>,
-                startupConfig,
-                StartupOptions.FFmpegPath));
+            serviceCollection.AddSingleton<IMediaEncoder>(provider =>
+                new MediaBrowser.MediaEncoding.Encoder.MediaEncoder(
+                    provider.GetRequiredService<ILogger<MediaBrowser.MediaEncoding.Encoder.MediaEncoder>>(),
+                    provider.GetRequiredService<IServerConfigurationManager>(),
+                    provider.GetRequiredService<IFileSystem>(),
+                    provider.GetRequiredService<IProcessFactory>(),
+                    provider.GetRequiredService<ILocalizationManager>(),
+                    provider.GetRequiredService<ISubtitleEncoder>,
+                    provider.GetRequiredService<IConfiguration>(),
+                    StartupOptions.FFmpegPath));
 
             // TODO: Refactor to eliminate the circular dependencies here so that Lazy<T> isn't required
             serviceCollection.AddTransient(provider => new Lazy<ILibraryMonitor>(provider.GetRequiredService<ILibraryMonitor>));
@@ -735,8 +732,12 @@ namespace Emby.Server.Implementations
         /// <summary>
         /// Create services registered with the service container that need to be initialized at application startup.
         /// </summary>
-        public void InitializeServices()
+        /// <returns>A task representing the service initialization operation.</returns>
+        public async Task InitializeServices()
         {
+            var localizationManager = (LocalizationManager)Resolve<ILocalizationManager>();
+            await localizationManager.LoadAll().ConfigureAwait(false);
+
             _mediaEncoder = Resolve<IMediaEncoder>();
             _sessionManager = Resolve<ISessionManager>();
             _httpServer = Resolve<IHttpServer>();
@@ -833,7 +834,7 @@ namespace Emby.Server.Implementations
             BaseItem.ConfigurationManager = ServerConfigurationManager;
             BaseItem.LibraryManager = Resolve<ILibraryManager>();
             BaseItem.ProviderManager = Resolve<IProviderManager>();
-            BaseItem.LocalizationManager = LocalizationManager;
+            BaseItem.LocalizationManager = Resolve<ILocalizationManager>();
             BaseItem.ItemRepository = Resolve<IItemRepository>();
             User.UserManager = Resolve<IUserManager>();
             BaseItem.FileSystem = FileSystemManager;

+ 0 - 3
Emby.Server.Implementations/Localization/LocalizationManager.cs

@@ -23,9 +23,6 @@ namespace Emby.Server.Implementations.Localization
         private static readonly Assembly _assembly = typeof(LocalizationManager).Assembly;
         private static readonly string[] _unratedValues = { "n/a", "unrated", "not rated" };
 
-        /// <summary>
-        /// The _configuration manager.
-        /// </summary>
         private readonly IServerConfigurationManager _configurationManager;
         private readonly IJsonSerializer _jsonSerializer;
         private readonly ILogger _logger;

+ 1 - 1
Jellyfin.Server/Program.cs

@@ -208,7 +208,7 @@ namespace Jellyfin.Server
 
                 // 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;
-                appHost.InitializeServices();
+                await appHost.InitializeServices().ConfigureAwait(false);
                 Migrations.MigrationRunner.Run(appHost, _loggerFactory);
 
                 try