public static Factory Config(IConfigurationProvider provider, Func<string, IDbConnection> connectionConstructor) { // set the conguration information var config = provider.Create(); Current._configuration = config; // load the dispatcher type for intialization var dispatcherName = config.Dispatcher; var dispatcherType = Type .GetType(config.Dispatchers.Where(dsp => dsp.Name == dispatcherName).First().Type) .MakeGenericType(typeof(DataSharding)); // load the policies and the related database connection strings foreach (var policy in config.Policies) { var dispatcherKey = policy.Version; var databases = policy.Nodes.Split(';') .Select((node) => config.Databases .Where(db => db.Name == node) .FirstOrDefault()) .ToList(); Current._dispachers.Add(dispatcherKey, CreateDispatcher(dispatcherType, databases)); } // load the currently version provider var versionProviderName = config.VersionProvider; var versionProviderType = Type .GetType(config.VersionProviders.Where(vp => vp.Name == versionProviderName).First().Type); Current._versionProvider = Activator.CreateInstance(versionProviderType) as IVersionProvider; Current._versionProvider.CurrentVersion = config.Version; // set the other properties Current._retries = config.Retries; Current._connectionConstructor = connectionConstructor; // return the singleton instance return Current; }
public IAppConfiguration Load() { const string configFileName = Default.Config.FileName; IAppConfiguration appConfiguration; var result = _configurationProvider.Load(configFileName, out appConfiguration); if (result.DoesExist == false || result.ReadError == true) { result = _configurationProvider.Create(configFileName, out appConfiguration); } if (result.DidFail) { throw result.Exception; } return(appConfiguration); }