Browse Source

Simplify plugin loading

Bond_009 6 years ago
parent
commit
9af28607c9
2 changed files with 13 additions and 36 deletions
  1. 10 35
      Emby.Server.Implementations/ApplicationHost.cs
  2. 3 1
      Jellyfin.Server/CoreAppHost.cs

+ 10 - 35
Emby.Server.Implementations/ApplicationHost.cs

@@ -303,7 +303,6 @@ namespace Emby.Server.Implementations
         /// <value>The user data repository.</value>
         private IUserDataManager UserDataManager { get; set; }
         private IUserRepository UserRepository { get; set; }
-        internal IDisplayPreferencesRepository DisplayPreferencesRepository { get; set; }
         internal SqliteItemRepository ItemRepository { get; set; }
 
         private INotificationManager NotificationManager { get; set; }
@@ -472,6 +471,7 @@ namespace Emby.Server.Implementations
         {
             try
             {
+                Logger.LogWarning("Creating instance of {Type}", type);
                 return ActivatorUtilities.CreateInstance(_serviceProvider, type);
             }
             catch (Exception ex)
@@ -525,29 +525,6 @@ namespace Emby.Server.Implementations
             return parts;
         }
 
-        public List<(T, string)> GetExportsWithInfo<T>(bool manageLifetime = true)
-        {
-            var parts = GetExportTypes<T>()
-                .Select(i =>
-                {
-                    var obj = CreateInstanceSafe(i);
-
-                    return ((T)obj, i.Assembly.Location);
-                })
-                .Where(i => i.Item1 != null)
-                .ToList();
-
-            if (manageLifetime)
-            {
-                lock (DisposableParts)
-                {
-                    DisposableParts.AddRange(parts.Select(i => i.Item1).OfType<IDisposable>());
-                }
-            }
-
-            return parts;
-        }
-
         /// <summary>
         /// Runs the startup tasks.
         /// </summary>
@@ -721,8 +698,7 @@ namespace Emby.Server.Implementations
             serviceCollection.AddSingleton(UserRepository);
 
             var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LoggerFactory, JsonSerializer, ApplicationPaths, FileSystemManager);
-            DisplayPreferencesRepository = displayPreferencesRepo;
-            serviceCollection.AddSingleton(DisplayPreferencesRepository);
+            serviceCollection.AddSingleton<IDisplayPreferencesRepository>(displayPreferencesRepo);
 
             ItemRepository = new SqliteItemRepository(ServerConfigurationManager, this, JsonSerializer, LoggerFactory, assemblyInfo);
             serviceCollection.AddSingleton<IItemRepository>(ItemRepository);
@@ -1085,7 +1061,10 @@ namespace Emby.Server.Implementations
             }
 
             ConfigurationManager.AddParts(GetExports<IConfigurationFactory>());
-            Plugins = GetExportsWithInfo<IPlugin>().Select(LoadPlugin).Where(i => i != null).ToArray();
+            Plugins = GetExports<IPlugin>()
+                        .Select(LoadPlugin)
+                        .Where(i => i != null)
+                        .ToArray();
 
             HttpServer.Init(GetExports<IService>(false), GetExports<IWebSocketListener>());
 
@@ -1119,19 +1098,15 @@ namespace Emby.Server.Implementations
             IsoManager.AddParts(GetExports<IIsoMounter>());
         }
 
-        private IPlugin LoadPlugin((IPlugin, string) info)
+        private IPlugin LoadPlugin(IPlugin plugin)
         {
-            var plugin = info.Item1;
-            var assemblyFilePath = info.Item2;
-
             try
             {
-                var assemblyPlugin = plugin as IPluginAssembly;
-
-                if (assemblyPlugin != null)
+                if (plugin is IPluginAssembly assemblyPlugin)
                 {
                     var assembly = plugin.GetType().Assembly;
                     var assemblyName = assembly.GetName();
+                    var assemblyFilePath = assembly.Location;
 
                     var dataFolderPath = Path.Combine(ApplicationPaths.PluginsPath, Path.GetFileNameWithoutExtension(assemblyFilePath));
 
@@ -1401,7 +1376,7 @@ namespace Emby.Server.Implementations
                 foreach (var file in Directory.EnumerateFiles(ApplicationPaths.PluginsPath, "*.dll", SearchOption.TopDirectoryOnly))
                 {
                     Logger.LogInformation("Loading assembly {Path}", file);
-                    yield return Assembly.LoadFile(file);
+                    yield return Assembly.LoadFrom(file);
                 }
             }
 

+ 3 - 1
Jellyfin.Server/CoreAppHost.cs

@@ -21,7 +21,9 @@ namespace Jellyfin.Server
         protected override void RestartInternal() => Program.Restart();
 
         protected override IEnumerable<Assembly> GetAssembliesWithPartsInternal()
-            => new[] { typeof(CoreAppHost).Assembly };
+        {
+            yield return typeof(CoreAppHost).Assembly;
+        }
 
         protected override void ShutdownInternal() => Program.Shutdown();