示例#1
0
        public static List <Type> GetFilteredTypesFromAssemblies(string cacheName, Predicate <Type> predicate, IBuildManager buildManager)
        {
            TypeCacheSerializer serializer    = new TypeCacheSerializer();
            List <Type>         matchingTypes = ReadTypesFromCache(cacheName, predicate, buildManager, serializer);

            if (matchingTypes == null)
            {
                matchingTypes = FilterTypesInAssemblies(buildManager, predicate).ToList <Type>();
                SaveTypesToCache(cacheName, matchingTypes, buildManager, serializer);
            }
            return(matchingTypes);
        }
示例#2
0
 internal static void SaveTypesToCache(string cacheName, IList <Type> matchingTypes, IBuildManager buildManager, TypeCacheSerializer serializer)
 {
     try
     {
         Stream stream = buildManager.CreateCachedFile(cacheName);
         if (stream != null)
         {
             using (StreamWriter writer = new StreamWriter(stream))
             {
                 serializer.SerializeTypes(matchingTypes, writer);
             }
         }
     }
     catch
     {
     }
 }
示例#3
0
        internal static List <Type> ReadTypesFromCache(string cacheName, Predicate <Type> predicate, IBuildManager buildManager, TypeCacheSerializer serializer)
        {
            Func <Type, bool> func = null;

            try
            {
                Stream stream = buildManager.ReadCachedFile(cacheName);
                if (stream != null)
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        List <Type> source = serializer.DeserializeTypes(reader);
                        if (source != null)
                        {
                            if (func == null)
                            {
                                func = type => TypeIsPublicClass(type) && predicate(type);
                            }
                            if (source.All <Type>(func))
                            {
                                return(source);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            return(null);
        }