Esempio n. 1
0
        /// <summary>
        /// Осуществляет перечисление сборок в папке <see cref="LibraryDirectory"/>.
        /// </summary>
        /// <param name="callbackAfterLoad">Если задано, то вызывается для сборки, если callbackBeforeLoad не задано или возвратило true.</param>
        /// <param name="callbackBeforeLoad">Если задано, то вызывается для каждой найденной сборки. Если возвращает false, то обработка этоЙ сборки прекращается.</param>
        /// <param name="enumerateAttrs">Указывает, какие библиотеки следует включить в перечисление.</param>
        /// <param name="nameForLogging"></param>
        /// <param name="tasksAllowed"></param>
        public static IEnumerable <TResult> Enumerate <TResult>(Func <Assembly, TResult> callbackAfterLoad, Func <string, bool> callbackBeforeLoad = null, EnumerateAttrs enumerateAttrs = EnumerateAttrs.ExcludeMicrosoft | EnumerateAttrs.ExcludeSystem, string nameForLogging = null, bool tasksAllowed = false)
        {
            var results = new HashSet <TResult>();

            var measure = new MeasureTime();

            try
            {
                Action <Assembly> action = (a) =>
                {
                    var result = callbackAfterLoad(a);
                    if (result != null)
                    {
                        results.Add(result);
                    }
                };

                var dddddd = new Reflection.LibraryEnumerator(action, callbackBeforeLoad, enumerateAttrs, GlobalAssemblyFilter, LoggingOptions, nameForLogging, tasksAllowed);
                dddddd.Enumerate();
            }
            catch (Exception)
            {
            }
            finally
            {
                if (!_isFirstFullEnumeration)
                {
                    _isFirstFullEnumeration = true;
                    if (LoggingOptions.HasFlag(eLoggingOptions.EnumerationSummaryFirstRun))
                    {
                        Debug.WriteLine("LibraryEnumeratorFactory.Enumerate: First enumeration ends with {0}ms", measure.Calculate().TotalMilliseconds);
                    }
                }
            }

            return(results);
        }
Esempio n. 2
0
        /// <summary>
        /// Осуществляет перечисление сборок в папке <see cref="LibraryDirectory"/>.
        /// </summary>
        /// <param name="callbackAfterLoad">Если задано, то вызывается для сборки, если callbackBeforeLoad не задано или возвратило true.</param>
        /// <param name="callbackBeforeLoad">Если задано, то вызывается для каждой найденной сборки. Если возвращает false, то обработка этоЙ сборки прекращается.</param>
        /// <param name="enumerateAttrs">Указывает, какие библиотеки следует включить в перечисление.</param>
        /// <param name="nameForLogging"></param>
        /// <param name="tasksAllowed"></param>
        public static void Enumerate(Action <Assembly> callbackAfterLoad, Func <string, bool> callbackBeforeLoad = null, EnumerateAttrs enumerateAttrs = EnumerateAttrs.ExcludeMicrosoft | EnumerateAttrs.ExcludeSystem, string nameForLogging = null, bool tasksAllowed = false)
        {
            var measure = new MeasureTime();

            try
            {
                var dddddd = new Reflection.LibraryEnumerator(callbackAfterLoad, callbackBeforeLoad, enumerateAttrs, GlobalAssemblyFilter, LoggingOptions, nameForLogging, tasksAllowed);
                dddddd.Enumerate();
            }
            catch (Exception)
            {
            }
            finally
            {
                if (!_isFirstFullEnumeration)
                {
                    _isFirstFullEnumeration = true;
                    if (LoggingOptions.HasFlag(eLoggingOptions.EnumerationSummaryFirstRun))
                    {
                        Debug.WriteLine("LibraryEnumeratorFactory.Enumerate: First enumeration ends with {0}ms", measure.Calculate().TotalMilliseconds);
                    }
                }
            }
        }