DocSpace-client/common/ASC.Common/Utils/ConfigurationManager.cs

65 lines
2.2 KiB
C#
Raw Normal View History

2022-01-26 10:42:30 +00:00
namespace ASC.Common.Utils
{
public class ConnectionStringCollection : IEnumerable<ConnectionStringSettings>
{
2022-02-03 14:18:58 +00:00
private List<ConnectionStringSettings> _data;
2022-02-03 14:18:58 +00:00
public ConnectionStringSettings this[string name] => _data.FirstOrDefault(r => r.Name == name);
2022-02-03 14:18:58 +00:00
public ConnectionStringCollection(IEnumerable<ConnectionStringSettings> data) => _data = data.ToList();
2022-02-03 14:18:58 +00:00
public IEnumerator<ConnectionStringSettings> GetEnumerator() => _data.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
2020-11-24 10:15:11 +00:00
[Singletone]
public class ConfigurationExtension
{
public string this[string key]
{
get => _configuration[key];
set => _configuration[key] = value;
}
private readonly IConfiguration _configuration;
private readonly Lazy<ConnectionStringCollection> _connectionStringSettings;
2020-11-24 10:15:11 +00:00
public ConfigurationExtension(IConfiguration configuration)
{
_configuration = configuration;
_connectionStringSettings = new Lazy<ConnectionStringCollection>(new ConnectionStringCollection(GetSettings<ConnectionStringSettings>("ConnectionStrings")));
2020-11-24 10:15:11 +00:00
}
public IEnumerable<T> GetSettings<T>(string section) where T : new()
{
var result = new List<T>();
var sectionSettings = _configuration.GetSection(section);
foreach (var ch in sectionSettings.GetChildren())
{
var cs = new T();
ch.Bind(cs);
result.Add(cs);
}
return result;
}
2020-11-24 10:15:11 +00:00
public T GetSetting<T>(string section) where T : new() => GetSetting(section, new T());
2022-01-21 08:26:25 +00:00
public T GetSetting<T>(string section, T instance)
{
var sectionSettings = _configuration.GetSection(section);
2022-01-21 08:26:25 +00:00
sectionSettings.Bind(instance);
2022-01-21 08:26:25 +00:00
return instance;
}
public ConnectionStringCollection GetConnectionStrings() => _connectionStringSettings.Value;
2020-12-25 10:48:04 +00:00
public ConnectionStringSettings GetConnectionStrings(string key) => GetConnectionStrings()[key];
}
2022-02-03 14:18:58 +00:00
}