/// <summary>
        /// Register all aspects into dependency resolver
        /// </summary>
        /// <returns></returns>
        public IServiceContainer Bootstrap(params Assembly[] scanAssemblies)
        {
            // Proc config validation
            ApplicationConfiguration config = null;

            try
            {
                config = ApplicationConfiguration.Instance;
            }
            catch { }
            finally
            {
                if (config.IsNull())
                {
                    throw new Exception("Signals.Core.Configuration.ApplicationConfiguration is not provided. Please use a configuration provider to provide configuration values!");
                }
            }

            if (DependencyResolver.IsNull() || DependencyResolver().IsNull())
            {
                throw new Exception("Dependency resolver not configured");
            }

            var resolver = DependencyResolver();

            if (!Logging.IsNull() && !Logging().IsNull())
            {
                resolver.Register(typeof(ILogger), Logging());
            }
            if (!Auditing.IsNull() && !Auditing().IsNull())
            {
                resolver.Register(typeof(IAuditProvider), Auditing());
            }
            if (!Cache.IsNull() && !Cache().IsNull())
            {
                resolver.Register(typeof(ICache), Cache());
            }
            if (!Localization.IsNull() && !Localization().IsNull())
            {
                resolver.Register(typeof(ILocalizationProvider), Localization());
            }
            if (!Storage.IsNull() && !Storage().IsNull())
            {
                resolver.Register(typeof(IStorageProvider), Storage());
            }
            if (!MessageChannel.IsNull() && !MessageChannel().IsNull())
            {
                resolver.Register(typeof(IMessageChannel), MessageChannel());
            }
            if (!AuthenticationManager.IsNull() && !AuthenticationManager().IsNull())
            {
                resolver.Register(typeof(IAuthenticationManager), AuthenticationManager());
            }
            if (!AuthorizationManager.IsNull() && !AuthorizationManager().IsNull())
            {
                resolver.Register(typeof(IAuthorizationManager), AuthorizationManager());
            }
            if (!TaskRegistry.IsNull() && !TaskRegistry().IsNull())
            {
                resolver.Register(typeof(ITaskRegistry), TaskRegistry());
            }
            if (!PermissionProvider.IsNull() && !PermissionProvider().IsNull())
            {
                resolver.Register(typeof(IPermissionProvider), PermissionProvider());
            }
            if (!Benchmarker.IsNull() && !Benchmarker().IsNull())
            {
                resolver.Register(typeof(IBenchmarker), Benchmarker());
            }
            if (!PermissionManager.IsNull() && !PermissionManager().IsNull())
            {
                resolver.Register(typeof(IPermissionManager), PermissionManager());
            }

            resolver.Register <CriticalErrorCallbackManager>();
            resolver.Register <IProcessFactory, ProcessFactory>();
            resolver.Register <IProcessExecutor, ProcessExecutor>();

            resolver.Register <IBusinessProcessContext, BusinessProcessContext>();
            resolver.Register <IApiProcessContext, ApiProcessContext>();
            resolver.Register <IDistributedProcessContext, DistributedProcessContext>();
            resolver.Register <IFileExportProcessContext, FileExportProcessContext>();
            resolver.Register <IFileImportProcessContext, FileImportProcessContext>();
            resolver.Register <IRecurringProcessContext, RecurringProcessContext>();

            resolver.Register <Mediator>();

            RegisterProcesses(config, resolver, scanAssemblies);
            RegisterErrorHendling(config, resolver);
            RegisterJsonSerializerSettings(config, resolver);
            RegisterSmtp(config, resolver);
            RegisterSyncLogProvider(config, resolver);

            var services = SystemBootstrapper.Init(resolver, scanAssemblies);

            return(services);
        }