Files
Orchard/src/Orchard.Web/Modules/Orchard.Redis/Configuration/RedisConnectionProvider.cs
Sebastien Ros b77f3a4c24 Fixing style
2014-10-21 21:32:47 -07:00

48 lines
1.8 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Configuration;
using Orchard.Environment.Configuration;
using Orchard.Logging;
using StackExchange.Redis;
namespace Orchard.Redis.Configuration {
public class RedisConnectionProvider : IRedisConnectionProvider {
private static ConcurrentDictionary<string, ConnectionMultiplexer> _connectionMultiplexers = new ConcurrentDictionary<string, ConnectionMultiplexer>();
private readonly ShellSettings _shellSettings;
public RedisConnectionProvider(ShellSettings shellSettings) {
_shellSettings = shellSettings;
Logger = NullLogger.Instance;
}
public ILogger Logger { get; set; }
public string GetConnectionString(string service) {
var _tenantSettingsKey = _shellSettings.Name + ":" + service;
var _defaultSettingsKey = service;
var connectionStringSettings = ConfigurationManager.ConnectionStrings[_tenantSettingsKey] ?? ConfigurationManager.ConnectionStrings[_defaultSettingsKey];
if (connectionStringSettings == null) {
throw new ConfigurationErrorsException("A connection string is expected for " + service);
}
return connectionStringSettings.ConnectionString;
}
public ConnectionMultiplexer GetConnection(string connectionString) {
if (String.IsNullOrWhiteSpace(connectionString)) {
throw new ArgumentNullException("connectionString");
}
var connectionMultiplexer = _connectionMultiplexers.GetOrAdd(connectionString, cfg => {
Logger.Debug("Creating a new cache client for: {0}", connectionString);
return ConnectionMultiplexer.Connect(connectionString);
});
return connectionMultiplexer;
}
}
}