public static IAppBuilder UseDbLocalizationProvider(this IAppBuilder builder, Action <ConfigurationContext> setup = null)
        {
            // setup default implementations
            ConfigurationContext.Current.TypeFactory.ForQuery <AvailableLanguages.Query>().SetHandler <AvailableLanguagesHandler>();
            ConfigurationContext.Current.TypeFactory.ForQuery <GetTranslation.Query>().SetHandler <GetTranslationHandler>();

            ConfigurationContext.Current.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler <GetAllResourcesHandler>();
            ConfigurationContext.Current.TypeFactory.ForQuery <GetAllResources.Query>().DecorateWith <CachedGetAllResourcesHandler>();
            ConfigurationContext.Current.TypeFactory.ForQuery <GetResource.Query>().SetHandler <GetResourceHandler>();
            ConfigurationContext.Current.TypeFactory.ForQuery <GetAllTranslations.Query>().SetHandler <GetAllTranslationsHandler>();

            ConfigurationContext.Current.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();

            ConfigurationContext.Current.TypeFactory.ForCommand <CreateNewResource.Command>().SetHandler <CreateNewResourceHandler>();
            ConfigurationContext.Current.TypeFactory.ForCommand <DeleteResource.Command>().SetHandler <DeleteResourceHandler>();
            ConfigurationContext.Current.TypeFactory.ForCommand <RemoveTranslation.Command>().SetHandler <RemoveTranslationHandler>();
            ConfigurationContext.Current.TypeFactory.ForCommand <CreateOrUpdateTranslation.Command>().SetHandler <CreateOrUpdateTranslationHandler>();
            ConfigurationContext.Current.TypeFactory.ForCommand <ClearCache.Command>().SetHandler <ClearCacheHandler>();

            ConfigurationContext.Current.CacheManager = new HttpCacheManager();

            if (setup != null)
            {
                ConfigurationContext.Setup(setup);
            }

            ConfigurationContext.Current.DbContextConnectionString = ConfigurationManager.ConnectionStrings[ConfigurationContext.Current.Connection].ConnectionString;

            var synchronizer = new ResourceSynchronizer();

            synchronizer.DiscoverAndRegister();

            // set model metadata providers
            if (ConfigurationContext.Current.ModelMetadataProviders.ReplaceProviders)
            {
                // set current provider
                if (ModelMetadataProviders.Current == null)
                {
                    if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders)
                    {
                        ModelMetadataProviders.Current = new CachedLocalizedMetadataProvider();
                    }
                    else
                    {
                        ModelMetadataProviders.Current = new LocalizedMetadataProvider();
                    }
                }
                else
                {
                    if (ConfigurationContext.Current.ModelMetadataProviders.UseCachedProviders)
                    {
                        ModelMetadataProviders.Current = new CompositeModelMetadataProvider <CachedLocalizedMetadataProvider>(ModelMetadataProviders.Current);
                    }
                    else
                    {
                        ModelMetadataProviders.Current = new CompositeModelMetadataProvider <LocalizedMetadataProvider>(ModelMetadataProviders.Current);
                    }
                }

                for (var i = 0; i < ModelValidatorProviders.Providers.Count; i++)
                {
                    var provider = ModelValidatorProviders.Providers[i];
                    if (!(provider is DataAnnotationsModelValidatorProvider))
                    {
                        continue;
                    }

                    ModelValidatorProviders.Providers.RemoveAt(i);
                    ModelValidatorProviders.Providers.Insert(i, new LocalizedModelValidatorProvider());
                    break;
                }
            }

            // in cases when there has been already a call to LoclaizationProvider.Current (some static weird things)
            // and only then setup configuration is ran - here we need to reset instance once again with new settings
            LocalizationProvider.Initialize();

            return(builder);
        }
 public static string GetString(this LocalizationProvider provider, Expression <Func <object> > resource, params object[] formatArguments)
 {
     return(GetStringByCulture(provider, resource, CultureInfo.CurrentUICulture, formatArguments));
 }