Example #1
0
        public virtual IEnumerable <Type> Scan()
        {
            if (ScannedResultCached)
            {
                foreach (var cachedType in ScannedResultCache)
                {
                    yield return(cachedType);
                }
            }
            else
            {
                var assemblies = GetAssemblies();
                foreach (var assembly in assemblies)
                {
                    if (NeedToIgnore(assembly))
                    {
                        continue;
                    }
                    var types = _typesFilter(assembly);
                    foreach (var type in types)
                    {
                        ScannedResultCache.Add(type);
                        yield return(type);
                    }
                }

                ScannedResultCached = true;
            }

            // ReSharper disable once InconsistentNaming
            IEnumerable <Type> _typesFilter(Assembly assembly)
            => assembly.GetExportedTypes().Where(TypeFilter());
        }
Example #2
0
 protected TypeScanner(string scannerName)
 {
     _anonymousDisposableObject = AnonymousDisposableObject.Create(() =>
     {
         ScannedResultCache.Clear();
         ScannedResultCache  = null;
         ScannedResultCached = false;
     });
 }