@@ -15,8 +15,13 @@ namespace ScriptEngine.Machine.Contexts
1515 static class ContextDiscoverer
1616 {
1717 private const string INSTANCE_RETRIEVER_NAME = "CreateInstance" ;
18+
19+ public static void DiscoverClasses ( Assembly assembly )
20+ {
21+ DiscoverClasses ( assembly , t => true ) ;
22+ }
1823
19- public static void DiscoverClasses ( System . Reflection . Assembly assembly )
24+ public static void DiscoverClasses ( Assembly assembly , Func < Type , bool > filter )
2025 {
2126 IEnumerable < Type > types ;
2227 try
@@ -37,29 +42,34 @@ public static void DiscoverClasses(System.Reflection.Assembly assembly)
3742
3843 var collection = GetMarkedTypes ( types , typeof ( ContextClassAttribute ) ) ;
3944
40- foreach ( var type in collection )
45+ foreach ( var type in collection . Where ( filter ) )
4146 {
4247 RegisterSystemType ( type ) ;
4348 }
4449 }
4550
46- public static void DiscoverGlobalContexts ( RuntimeEnvironment environment , System . Reflection . Assembly assembly )
51+ public static void DiscoverGlobalContexts ( RuntimeEnvironment environment , Assembly assembly )
52+ {
53+ DiscoverGlobalContexts ( environment , assembly , t => true ) ;
54+ }
55+
56+ public static void DiscoverGlobalContexts ( RuntimeEnvironment environment , Assembly assembly , Func < Type , bool > filter )
4757 {
4858 var allTypes = assembly . GetTypes ( ) ;
4959 var enums = GetMarkedTypes ( allTypes . AsParallel ( ) , typeof ( SystemEnumAttribute ) ) ;
50- foreach ( var item in enums )
60+ foreach ( var item in enums . Where ( filter ) )
5161 {
5262 RegisterSystemEnum ( item , environment ) ;
5363 }
5464
5565 var simpleEnums = GetMarkedTypes ( allTypes . AsParallel ( ) , typeof ( EnumerationTypeAttribute ) ) ;
56- foreach ( var item in simpleEnums )
66+ foreach ( var item in simpleEnums . Where ( filter ) )
5767 {
5868 RegisterSimpleEnum ( item , environment ) ;
5969 }
6070
6171 var contexts = GetMarkedTypes ( allTypes . AsParallel ( ) , typeof ( GlobalContextAttribute ) ) ;
62- foreach ( var item in contexts )
72+ foreach ( var item in contexts . Where ( filter ) )
6373 {
6474 RegisterGlobalContext ( item , environment ) ;
6575 }
0 commit comments