private static IEnumerable<Type> FilterTypesInAssemblies(IBuildManager buildManager, Predicate<Type> predicate) { // Go through all assemblies referenced by the application and search for types matching a predicate IEnumerable<Type> typesSoFar = Type.EmptyTypes; ICollection assemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in assemblies) { Type[] typesInAsm; try { try { typesInAsm = assembly.GetExportedTypes(); } catch (NotImplementedException) { typesInAsm = assembly.GetTypes(); } } catch (ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } typesSoFar = typesSoFar.Concat(typesInAsm); } return typesSoFar.Where(type => TypeIsPublicClass(type) && predicate(type)); }
private static IEnumerable <Type> FilterTypesInAssemblies( IBuildManager buildManager, Predicate <Type> predicate ) { // Go through all assemblies referenced by the application and search for types matching a predicate IEnumerable <Type> typesSoFar = Type.EmptyTypes; ICollection assemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in assemblies) { Type[] typesInAsm; try { typesInAsm = assembly.GetTypes(); } catch (ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } typesSoFar = typesSoFar.Concat(typesInAsm); } return(typesSoFar.Where(type => TypeIsPublicClass(type) && predicate(type))); }
//时时刻刻能感受到,是我要怎么写代码,而不是我只能如何写代码,而是我真正驾驭着代码。 private static IEnumerable<Type> FilterTypesInAssemblies(IBuildManager buildManager,Predicate<Type> predict) { //遍历所有的引用的assembly去找到匹配predict的Type IEnumerable<Type> typesSoFar = Type.EmptyTypes; ICollection assemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in assemblies) { Type[] typesInAsm = assembly.GetTypes(); typesSoFar = typesSoFar.Concat(typesInAsm); //这么写有什么必要吗??? } return typesSoFar.Where(type=>predict(type)); }
private static List<Type> GetAllControllerTypes(IBuildManager buildManager) { // Go through all assemblies referenced by the application and search for // controllers and controller factories. List<Type> controllerTypes = new List<Type>(); ICollection assemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in assemblies) { Type[] typesInAsm; try { typesInAsm = assembly.GetTypes(); } catch (ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } controllerTypes.AddRange(typesInAsm.Where(IsControllerType)); } return controllerTypes; }
private static IEnumerable<Type> DiscoverControllerTypes(IBuildManager buildManager) { List<Type> types = new List<Type>(); foreach (Assembly assembly in buildManager.GetReferencedAssemblies()) { Type[] typesInAsm; try { typesInAsm = assembly.GetTypes(); } catch (ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } types.AddRange(typesInAsm.Where(IsController)); } return types; }
private static IEnumerable <Type> DiscoverControllerTypes(IBuildManager buildManager) { List <Type> types = new List <Type>(); foreach (Assembly assembly in buildManager.GetReferencedAssemblies()) { Type[] typesInAsm; try { typesInAsm = assembly.GetTypes(); } catch (ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } types.AddRange(typesInAsm.Where(IsController)); } return(types); }
private static IEnumerable<Type> FilterTypesInAssemblies(IBuildManager buildManager, Predicate<Type> predicate) { // Go through all assemblies referenced by the application and search for types matching a predicate IEnumerable<Type> typesSoFar = Type.EmptyTypes; ICollection assemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in assemblies) { if (assembly.IsDynamic) { // can't call GetExportedTypes on a dynamic assembly continue; } typesSoFar = typesSoFar.Concat(assembly.GetExportedTypes()); } return typesSoFar.Where(type => predicate(type)); }
/// <summary> /// Aplica o filtro sobre os assemblies do BuildManager. /// </summary> /// <param name="buildManager"></param> /// <param name="predicate"></param> /// <returns></returns> private static IEnumerable <Type> FilterTypesInAssemblies(IBuildManager buildManager, Predicate <Type> predicate) { IEnumerable <Type> typesSoFar = Type.EmptyTypes; var assemblies = buildManager.GetReferencedAssemblies(); foreach (System.Reflection.Assembly assembly in assemblies) { Type[] typesInAsm; try { typesInAsm = assembly.GetTypes(); } catch (System.Reflection.ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } typesSoFar = typesSoFar.Concat(typesInAsm); } return(typesSoFar.Where(type => TypeIsPublicClass(type) && predicate(type))); }
private static List <Type> GetAllControllerTypes(IBuildManager buildManager) { // Go through all assemblies referenced by the application and search for // controllers and controller factories. List <Type> controllerTypes = new List <Type>(); ICollection assemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in assemblies) { Type[] typesInAsm; try { typesInAsm = assembly.GetTypes(); } catch (ReflectionTypeLoadException ex) { typesInAsm = ex.Types; } controllerTypes.AddRange(typesInAsm.Where(IsControllerType)); } return(controllerTypes); }
private static IEnumerable <Type> FilterTypesInAssemblies(IBuildManager buildManager, Predicate <Type> predicate) { IEnumerable <Type> emptyTypes = Type.EmptyTypes; foreach (Assembly assembly in buildManager.GetReferencedAssemblies()) { Type[] types; try { types = assembly.GetTypes(); } catch (ReflectionTypeLoadException exception) { types = exception.Types; } emptyTypes = emptyTypes.Concat <Type>(types); } return(from type in emptyTypes where TypeIsPublicClass(type) && predicate(type) select type); }
private static IEnumerable<Type> FilterTypesInAssemblies(IBuildManager buildManager, Predicate<Type> predicate) { IEnumerable<Type> enumerable = Type.EmptyTypes; ICollection referencedAssemblies = buildManager.GetReferencedAssemblies(); foreach (Assembly assembly in referencedAssemblies) { Type[] types; try { types = assembly.GetTypes(); } catch (ReflectionTypeLoadException ex) { types = ex.Types; } enumerable = enumerable.Concat(types); } return from type in enumerable where TypeIsPublicClass(type) && predicate(type) select type; }