/// <summary>
        /// Build instances from configurations by convention
        /// </summary>
        /// <returns></returns>
        internal virtual IServiceContainer Resolve(ConfigurationBootstrapper configurationBootstrapper = null, params Assembly[] scanAssemblies)
        {
            var config = configurationBootstrapper ?? new ConfigurationBootstrapper();

            scanAssemblies = scanAssemblies ?? new Assembly[0];
            _allTypes      = scanAssemblies.SelectMany(assembly => assembly.LoadAllTypesFromAssembly().Where(type => type.FullName.StartsWith("Signals"))).ToList();

            config.JsonSerializerSettings = () => JsonSerializerSettings;
            //config.RecurringTaskLogProvider = () => RecurringTaskLogProvider;
            config.DependencyResolver = () => RegistrationService;
            config.Logging            = () => GetInstance <ILogger>(LoggerConfiguration);
            config.Auditing           = () => GetInstance <IAuditProvider>(AuditingConfiguration);
            config.Cache                 = () => GetInstance <ICache>(CacheConfiguration);
            config.Storage               = () => GetInstance <IStorageProvider>(StorageConfiguration);
            config.MessageChannel        = () => GetInstance <IMessageChannel>(ChannelConfiguration);
            config.PermissionProvider    = () => GetInstance <IPermissionProvider>(SecurityConfiguration);
            config.Benchmarker           = () => GetInstance <IBenchmarker>(BenchmarkingConfiguration);
            config.AuthenticationManager = () => GetImplementationTypes <IAuthenticationManager>().SingleOrDefault();
            config.AuthorizationManager  = () => GetImplementationTypes <IAuthorizationManager>().SingleOrDefault();
            config.TaskRegistry          = () => TaskRegistry;
            config.ErrorHandling         = () => StrategyBuilder;

            var localizaitonProvider = GetInstance <ILocalizationDataProvider>(LocalizationConfiguration);

            config.Localization = () => !localizaitonProvider.IsNull() ? new LocalizationProvider(localizaitonProvider) : null;

            if (SecurityConfiguration.IsNull())
            {
                if (config.AuthenticationManager()?.IsNull() == false)
                {
                    config.PermissionManager = () =>
                                               GetImplementationTypes <IPermissionManager>()
                                               .SingleOrDefault(x => !x.IsAssignableFrom(typeof(Processing.Authorization.PermissionManager)));
                }
            }
            else
            {
                config.PermissionManager = () => typeof(Processing.Authorization.PermissionManager);
            }

            return(config.Bootstrap(scanAssemblies));
        }
 /// <summary>
 /// Internal resolver
 /// </summary>
 /// <param name="configurationBootstrapper"></param>
 /// <param name="scanAssemblies"></param>
 /// <returns></returns>
 IServiceContainer IApplicationBootstrapConfiguration.Resolve(ConfigurationBootstrapper configurationBootstrapper, params Assembly[] scanAssemblies)
 {
     return(Resolve(configurationBootstrapper, scanAssemblies));
 }