Beispiel #1
0
 public static void RunHandler <T>(Action <T> handler, T args)
 {
     try
     {
         handler(args);
     }
     catch (Exception ex)
     {
         LogPortal.Error(ex.Message, ex);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Call to begin bootstrapping. Can only be run once.
        /// </summary>
        public IBootstrapper Bootstrap()
        {
            if (Bootstrapped)
            {
                return(this);
            }

            lock (Padlock)
            {
                if (Bootstrapped)
                {
                    return(this);
                }

                LogPortal.SetLogger(_logger);

                var stopwatch = new Stopwatch();
                _logger.Info("Bootstrapping");

                _logger.Debug("Running DependencyTask");
                stopwatch.Start();
                _dependencyRegistrar.ConfigureDependencies();
                stopwatch.Stop();
                _logger.DebugFormat("Completed DependencyTask in {0}ms", stopwatch.ElapsedMilliseconds);
                stopwatch.Reset();

                var startupTasks = _dependencyRegistrar.ResolveStartupTasks().OrderBy(task => task.Order).ToList();
                foreach (var bootstrapTask in startupTasks)
                {
                    var type = bootstrapTask.GetType();

                    if (type.IsDefined(typeof(SkipTaskAttribute), false))
                    {
                        continue;
                    }

                    _logger.Debug("Running " + type.Name);
                    stopwatch.Start();

                    try
                    {
                        bootstrapTask.Bootstrap();
                    }
                    catch (Exception e)
                    {
                        _logger.Error("Bootstrapping Failed", e);
                        throw;
                    }

                    stopwatch.Stop();
                    _logger.DebugFormat("Completed {0} in {1}ms", type.Name, stopwatch.ElapsedMilliseconds);
                    stopwatch.Reset();

                    if (typeof(IDisposable).IsAssignableFrom(type))
                    {
                        DisposableTasks.Add((IDisposable)bootstrapTask);
                    }
                }

                _logger.Debug("Bootstrapping Completed");
                Bootstrapped = true;
            }
            return(this);
        }