Refactor GetInstances method

This commit is contained in:
Jaex 2021-05-31 10:40:42 +03:00
parent d4bfdbd7b8
commit eefbd00925
2 changed files with 8 additions and 9 deletions

View file

@ -1351,18 +1351,17 @@ public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
} }
} }
public static T[] GetInstances<T>() where T : class public static IEnumerable<T> GetInstances<T>() where T : class
{ {
IEnumerable<T> instances = from t in Assembly.GetCallingAssembly().GetTypes() Type baseType = typeof(T);
where t.IsClass && t.IsSubclassOf(typeof(T)) && t.GetConstructor(Type.EmptyTypes) != null Assembly assembly = baseType.Assembly;
select Activator.CreateInstance(t) as T; return assembly.GetTypes().Where(t => t.IsClass && t.IsSubclassOf(baseType) && t.GetConstructor(Type.EmptyTypes) != null).
Select(t => Activator.CreateInstance(t) as T);
return instances.ToArray();
} }
public static IEnumerable<Type> FindSubclassesOf<TBaseType>() public static IEnumerable<Type> FindSubclassesOf<T>()
{ {
Type baseType = typeof(TBaseType); Type baseType = typeof(T);
Assembly assembly = baseType.Assembly; Assembly assembly = baseType.Assembly;
return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
} }

View file

@ -41,7 +41,7 @@ public static class UploaderFactory
private static Dictionary<T, T2> CacheServices<T, T2>() where T2 : UploaderService<T> private static Dictionary<T, T2> CacheServices<T, T2>() where T2 : UploaderService<T>
{ {
T2[] instances = Helpers.GetInstances<T2>(); IEnumerable<T2> instances = Helpers.GetInstances<T2>();
AllServices.AddRange(instances.OfType<IUploaderService>()); AllServices.AddRange(instances.OfType<IUploaderService>());
AllGenericUploaderServices.AddRange(instances.OfType<IGenericUploaderService>()); AllGenericUploaderServices.AddRange(instances.OfType<IGenericUploaderService>());