From eefbd00925295606deae8e972fd70b02e94a9115 Mon Sep 17 00:00:00 2001 From: Jaex Date: Mon, 31 May 2021 10:40:42 +0300 Subject: [PATCH] Refactor GetInstances method --- ShareX.HelpersLib/Helpers/Helpers.cs | 15 +++++++-------- ShareX.UploadersLib/UploaderFactory.cs | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ShareX.HelpersLib/Helpers/Helpers.cs b/ShareX.HelpersLib/Helpers/Helpers.cs index ca304dc5b..8131c7ed1 100644 --- a/ShareX.HelpersLib/Helpers/Helpers.cs +++ b/ShareX.HelpersLib/Helpers/Helpers.cs @@ -1351,18 +1351,17 @@ public static void CopyAll(DirectoryInfo source, DirectoryInfo target) } } - public static T[] GetInstances() where T : class + public static IEnumerable GetInstances() where T : class { - IEnumerable instances = from t in Assembly.GetCallingAssembly().GetTypes() - where t.IsClass && t.IsSubclassOf(typeof(T)) && t.GetConstructor(Type.EmptyTypes) != null - select Activator.CreateInstance(t) as T; - - return instances.ToArray(); + Type baseType = typeof(T); + Assembly assembly = baseType.Assembly; + return assembly.GetTypes().Where(t => t.IsClass && t.IsSubclassOf(baseType) && t.GetConstructor(Type.EmptyTypes) != null). + Select(t => Activator.CreateInstance(t) as T); } - public static IEnumerable FindSubclassesOf() + public static IEnumerable FindSubclassesOf() { - Type baseType = typeof(TBaseType); + Type baseType = typeof(T); Assembly assembly = baseType.Assembly; return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); } diff --git a/ShareX.UploadersLib/UploaderFactory.cs b/ShareX.UploadersLib/UploaderFactory.cs index 3e41dc63c..fed918b0c 100644 --- a/ShareX.UploadersLib/UploaderFactory.cs +++ b/ShareX.UploadersLib/UploaderFactory.cs @@ -41,7 +41,7 @@ public static class UploaderFactory private static Dictionary CacheServices() where T2 : UploaderService { - T2[] instances = Helpers.GetInstances(); + IEnumerable instances = Helpers.GetInstances(); AllServices.AddRange(instances.OfType()); AllGenericUploaderServices.AddRange(instances.OfType());