DI: configuration

This commit is contained in:
pavelbannov 2019-10-09 19:08:37 +03:00
parent 515f7de555
commit 74d8709f62
17 changed files with 92 additions and 55 deletions

View File

@ -20,7 +20,7 @@ namespace ASC.Common.Utils
{ {
AppSettings = serviceProvider.GetService<IConfiguration>(); AppSettings = serviceProvider.GetService<IConfiguration>();
LogManager = serviceProvider.GetService<LogManager>(); LogManager = serviceProvider.GetService<LogManager>();
ConnectionStrings = new ConnectionStringCollection(GetSettings<ConnectionStringSettings>("ConnectionStrings")); ConnectionStrings = AppSettings.GetConnectionStrings();
} }
public static void UseCm(this IApplicationBuilder applicationBuilder) public static void UseCm(this IApplicationBuilder applicationBuilder)
{ {
@ -28,27 +28,11 @@ namespace ASC.Common.Utils
} }
public static IEnumerable<T> GetSettings<T>(string section) where T : new() public static IEnumerable<T> GetSettings<T>(string section) where T : new()
{ {
var result = new List<T>(); return AppSettings.GetSettings<T>(section);
var sectionSettings = AppSettings.GetSection(section);
foreach (var ch in sectionSettings.GetChildren())
{
var cs = new T();
ch.Bind(cs);
result.Add(cs);
}
return result;
} }
public static T GetSetting<T>(string section) where T : new() public static T GetSetting<T>(string section) where T : new()
{ {
var sectionSettings = AppSettings.GetSection(section); return AppSettings.GetSetting<T>(section);
var cs = new T();
sectionSettings.Bind(cs);
return cs;
} }
} }
@ -76,4 +60,41 @@ namespace ASC.Common.Utils
} }
} }
} }
public static class ConfigurationExtension
{
public static IEnumerable<T> GetSettings<T>(this IConfiguration configuration, 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;
}
public static T GetSetting<T>(this IConfiguration configuration, string section) where T : new()
{
var sectionSettings = configuration.GetSection(section);
var cs = new T();
sectionSettings.Bind(cs);
return cs;
}
public static ConnectionStringCollection GetConnectionStrings(this IConfiguration configuration)
{
return new ConnectionStringCollection(configuration.GetSettings<ConnectionStringSettings>("ConnectionStrings"));
}
public static ConnectionStringSettings GetConnectionStrings(this IConfiguration configuration, string key)
{
return configuration.GetConnectionStrings()[key];
}
}
} }

View File

@ -32,7 +32,8 @@ using ASC.Common.Logging;
using ASC.Common.Module; using ASC.Common.Module;
using ASC.Common.Utils; using ASC.Common.Utils;
using ASC.Core.Data; using ASC.Core.Data;
using ASC.Core.Tenants; using ASC.Core.Tenants;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace ASC.Core.Billing namespace ASC.Core.Billing
@ -45,10 +46,11 @@ namespace ASC.Core.Billing
private Timer timer; private Timer timer;
public TariffSyncService(IServiceProvider serviceProvider) public TariffSyncService(IServiceProvider serviceProvider, IConfiguration configuration)
{ {
config = TariffSyncServiceSection.GetSection(); config = TariffSyncServiceSection.GetSection();
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
Configuration = configuration;
} }
@ -59,8 +61,8 @@ namespace ASC.Core.Billing
{ {
if (!quotaServices.ContainsKey(version)) if (!quotaServices.ContainsKey(version))
{ {
var cs = ConfigurationManager.ConnectionStrings[config.ConnectionStringName + version] ?? var cs = Configuration.GetConnectionStrings(config.ConnectionStringName + version) ??
ConfigurationManager.ConnectionStrings[config.ConnectionStringName]; Configuration.GetConnectionStrings(config.ConnectionStringName);
quotaServices[version] = new DbQuotaService(cs).GetTenantQuotas(); quotaServices[version] = new DbQuotaService(cs).GetTenantQuotas();
} }
return quotaServices[version]; return quotaServices[version];
@ -75,6 +77,7 @@ namespace ASC.Core.Billing
} }
public IServiceProvider ServiceProvider { get; } public IServiceProvider ServiceProvider { get; }
public IConfiguration Configuration { get; }
public void Start() public void Start()
{ {
@ -100,7 +103,7 @@ namespace ASC.Core.Billing
{ {
var scope = ServiceProvider.CreateScope(); var scope = ServiceProvider.CreateScope();
var tariffSync = scope.ServiceProvider.GetService<TariffSync>(); var tariffSync = scope.ServiceProvider.GetService<TariffSync>();
tariffSync.Sync(config); tariffSync.Sync(config, Configuration);
} }
catch (Exception error) catch (Exception error)
@ -119,13 +122,13 @@ namespace ASC.Core.Billing
public TenantManager TenantManager { get; } public TenantManager TenantManager { get; }
public void Sync(TariffSyncServiceSection config) public void Sync(TariffSyncServiceSection config, IConfiguration configuration)
{ {
var tenant = TenantManager.GetTenants(false).OrderByDescending(t => t.Version).FirstOrDefault(); var tenant = TenantManager.GetTenants(false).OrderByDescending(t => t.Version).FirstOrDefault();
if (tenant != null) if (tenant != null)
{ {
using var wcfClient = new TariffSyncClient(); using var wcfClient = new TariffSyncClient();
var quotaService = new DbQuotaService(ConfigurationManager.ConnectionStrings[config.ConnectionStringName]); var quotaService = new DbQuotaService(configuration.GetConnectionStrings(config.ConnectionStringName));
var oldtariffs = quotaService.GetTenantQuotas().ToDictionary(t => t.Id); var oldtariffs = quotaService.GetTenantQuotas().ToDictionary(t => t.Id);
// save new // save new

View File

@ -197,10 +197,13 @@ namespace ASC.Core
} }
private void Initialize() private void Initialize()
{ {
var connectionStrings = Configuraion.GetConnectionStrings();
var dbConnectionStrings = Configuraion.GetConnectionStrings(dbid);
if (Convert.ToBoolean(Configuraion["core.multi-hosted.config-only"] ?? "false")) if (Convert.ToBoolean(Configuraion["core.multi-hosted.config-only"] ?? "false"))
{ {
foreach (var cs in ConfigurationManager.ConnectionStrings) foreach (var cs in Configuraion.GetConnectionStrings())
{ {
if (cs.Name.StartsWith(dbid + ".")) if (cs.Name.StartsWith(dbid + "."))
{ {
@ -209,17 +212,17 @@ namespace ASC.Core
} }
} }
regions[dbid] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]); regions[dbid] = new HostedSolution(dbConnectionStrings);
if (!regions.ContainsKey(string.Empty)) if (!regions.ContainsKey(string.Empty))
{ {
regions[string.Empty] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]); regions[string.Empty] = new HostedSolution(dbConnectionStrings);
} }
} }
else else
{ {
var find = false; var find = false;
foreach (var cs in ConfigurationManager.ConnectionStrings) foreach (var cs in connectionStrings)
{ {
if (cs.Name.StartsWith(dbid + ".")) if (cs.Name.StartsWith(dbid + "."))
{ {
@ -230,15 +233,15 @@ namespace ASC.Core
} }
if (find) if (find)
{ {
regions[dbid] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]); regions[dbid] = new HostedSolution(dbConnectionStrings);
if (!regions.ContainsKey(string.Empty)) if (!regions.ContainsKey(string.Empty))
{ {
regions[string.Empty] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]); regions[string.Empty] = new HostedSolution(dbConnectionStrings);
} }
} }
else else
{ {
foreach (var connectionString in ConfigurationManager.ConnectionStrings) foreach (var connectionString in connectionStrings)
{ {
try try
{ {

View File

@ -31,6 +31,7 @@ namespace ASC.Core.Common.Tests
using ASC.Common.Utils; using ASC.Common.Utils;
using ASC.Core.Caching; using ASC.Core.Caching;
using ASC.Core.Data; using ASC.Core.Data;
using Microsoft.Extensions.Configuration;
using NUnit.Framework; using NUnit.Framework;
[TestFixture] [TestFixture]
@ -39,9 +40,9 @@ namespace ASC.Core.Common.Tests
private readonly ISubscriptionService service; private readonly ISubscriptionService service;
public CachedSubscriptionServiceTest() public CachedSubscriptionServiceTest(IConfiguration configuration)
{ {
service = new CachedSubscriptionService(new DbSubscriptionService(ConfigurationManager.ConnectionStrings["core"])); service = new CachedSubscriptionService(new DbSubscriptionService(configuration.GetConnectionStrings("core")));
} }

View File

@ -29,6 +29,7 @@ namespace ASC.Core.Common.Tests
{ {
using System; using System;
using ASC.Common.Utils; using ASC.Common.Utils;
using Microsoft.Extensions.Configuration;
public class DbBaseTest<TDbService> public class DbBaseTest<TDbService>
{ {
@ -43,11 +44,12 @@ namespace ASC.Core.Common.Tests
get; get;
private set; private set;
} }
internal IConfiguration Configuration { get; set; }
protected DbBaseTest() protected DbBaseTest()
{ {
Service = (TDbService)Activator.CreateInstance(typeof(TDbService), ConfigurationManager.ConnectionStrings["core"]); Service = (TDbService)Activator.CreateInstance(typeof(TDbService), Configuration.GetConnectionStrings("core"));
Tenant = 1024; Tenant = 1024;
//var pattern = "%message (%property{duration} ms) %property{sql} %property{sqlParams}%newline"; //var pattern = "%message (%property{duration} ms) %property{sql} %property{sqlParams}%newline";

View File

@ -44,7 +44,7 @@ namespace ASC.Core.Common.Tests
public DbTenantServiceTest() public DbTenantServiceTest()
{ {
userService = new DbUserService(ConfigurationManager.ConnectionStrings["core"]); userService = new DbUserService(Configuration.GetConnectionStrings("core"));
} }

View File

@ -30,15 +30,17 @@ namespace ASC.Core.Common.Tests
using System.Linq; using System.Linq;
using ASC.Common.Utils; using ASC.Common.Utils;
using ASC.Core.Tenants; using ASC.Core.Tenants;
using Microsoft.Extensions.Configuration;
using NUnit.Framework; using NUnit.Framework;
[TestFixture] [TestFixture]
public class HostedSolutionTest public class HostedSolutionTest
{ {
private IConfiguration Configuration { get; set; }
[Test] [Test]
public void FindTenants() public void FindTenants()
{ {
var h = new HostedSolution(ConfigurationManager.ConnectionStrings["core"]); var h = new HostedSolution(Configuration.GetConnectionStrings("core"));
var tenants = h.FindTenants("76ff727b-f987-4871-9834-e63d4420d6e9"); var tenants = h.FindTenants("76ff727b-f987-4871-9834-e63d4420d6e9");
Assert.AreNotEqual(0, tenants.Count); Assert.AreNotEqual(0, tenants.Count);
} }

View File

@ -43,7 +43,7 @@ namespace ASC.Core.Common.Tests
public TariffServiceTest(IConfiguration configuration, TenantDomainValidator tenantDomainValidator, TimeZoneConverter timeZoneConverter) public TariffServiceTest(IConfiguration configuration, TenantDomainValidator tenantDomainValidator, TimeZoneConverter timeZoneConverter)
{ {
var cs = ConfigurationManager.ConnectionStrings["core"]; var cs = configuration.GetConnectionStrings("core");
var tenantService = new DbTenantService(cs, tenantDomainValidator, timeZoneConverter); var tenantService = new DbTenantService(cs, tenantDomainValidator, timeZoneConverter);
var baseSettings = new CoreBaseSettings(configuration); var baseSettings = new CoreBaseSettings(configuration);
tariffService = new TariffService(cs, new DbQuotaService(cs), tenantService, baseSettings, new CoreSettings(tenantService, baseSettings, configuration), configuration); tariffService = new TariffService(cs, new DbQuotaService(cs), tenantService, baseSettings, new CoreSettings(tenantService, baseSettings, configuration), configuration);

View File

@ -30,6 +30,7 @@ namespace ASC.Core.Common.Tests
using System; using System;
using System.Linq; using System.Linq;
using ASC.Core.Billing; using ASC.Core.Billing;
using Microsoft.Extensions.Configuration;
using NUnit.Framework; using NUnit.Framework;
[TestFixture] [TestFixture]
@ -37,11 +38,12 @@ namespace ASC.Core.Common.Tests
{ {
private readonly ITariffSyncService tariffSyncService; private readonly ITariffSyncService tariffSyncService;
public IServiceProvider ServiceProvider { get; set; } public IServiceProvider ServiceProvider { get; set; }
public IConfiguration Configuration { get; set; }
public TariffSyncServiceTest() public TariffSyncServiceTest()
{ {
tariffSyncService = new TariffSyncService(ServiceProvider); tariffSyncService = new TariffSyncService(ServiceProvider, Configuration);
} }
[Test] [Test]

View File

@ -2,15 +2,16 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using ASC.Common.Utils; using ASC.Common.Utils;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace ASC.Data.Storage.Configuration namespace ASC.Data.Storage.Configuration
{ {
public static class StorageConfigFactory public static class StorageConfigFactory
{ {
public static IServiceCollection AddStorage(this IServiceCollection services) public static IServiceCollection AddStorage(this IServiceCollection services, IConfiguration configuration)
{ {
return services.AddSingleton(r => ConfigurationManager.GetSetting<Storage>("Storage")); return services.AddSingleton(r => configuration.GetSetting<Storage>("Storage"));
} }
} }

View File

@ -30,6 +30,7 @@ using System.Linq;
using ASC.Common.Utils; using ASC.Common.Utils;
using ASC.FederatedLogin.Profile; using ASC.FederatedLogin.Profile;
using ASC.Security.Cryptography; using ASC.Security.Cryptography;
using Microsoft.Extensions.Configuration;
namespace ASC.FederatedLogin namespace ASC.FederatedLogin
{ {
@ -52,9 +53,9 @@ namespace ASC.FederatedLogin
} }
public MultiRegionAccountLinker(string databaseId, Signature signature, InstanceCrypto instanceCrypto) public MultiRegionAccountLinker(string databaseId, Signature signature, InstanceCrypto instanceCrypto, IConfiguration configuration)
{ {
foreach (var connection in ConfigurationManager.ConnectionStrings) foreach (var connection in configuration.GetConnectionStrings())
{ {
if (connection.Name.StartsWith(databaseId)) if (connection.Name.StartsWith(databaseId))
_accountLinkers.Add(connection.Name, new AccountLinker(connection.Name, signature, instanceCrypto)); _accountLinkers.Add(connection.Name, new AccountLinker(connection.Name, signature, instanceCrypto));

View File

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using ASC.Common.DependencyInjection; using ASC.Common.DependencyInjection;
using ASC.Common.Utils; using ASC.Common.Utils;
using CommandLine; using CommandLine;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace ASC.Resource.Manager namespace ASC.Resource.Manager
@ -63,7 +64,7 @@ namespace ASC.Resource.Manager
return; return;
} }
enabledSettings = ConfigurationManager.GetSetting<EnabledSettings>("enabled"); enabledSettings = serviceProvider.GetService<IConfiguration>().GetSetting<EnabledSettings>("enabled");
cultures = ResourceData.GetCultures().Where(r => r.Available).Select(r => r.Title).Intersect(enabledSettings.Langs).ToList(); cultures = ResourceData.GetCultures().Where(r => r.Available).Select(r => r.Title).Intersect(enabledSettings.Langs).ToList();
projects = ResourceData.GetAllFiles(); projects = ResourceData.GetAllFiles();

View File

@ -43,7 +43,7 @@ namespace ASC.Notify
ConfigurationManager.Init(serviceProvider); ConfigurationManager.Init(serviceProvider);
CommonServiceProvider.Init(serviceProvider); CommonServiceProvider.Init(serviceProvider);
var c = ConfigurationManager.GetSetting<NotifyServiceCfg>("notify"); var c = hostContext.Configuration.GetSetting<NotifyServiceCfg>("notify");
c.Init(); c.Init();
services.AddSingleton(c); services.AddSingleton(c);
services.AddSingleton<DbWorker>(); services.AddSingleton<DbWorker>();

View File

@ -46,7 +46,7 @@ namespace ASC.Studio.Notify
services.AddSingleton<StudioNotifyServiceSender>(); services.AddSingleton<StudioNotifyServiceSender>();
services.AddHostedService<ServiceLauncher>(); services.AddHostedService<ServiceLauncher>();
services.AddHttpContextAccessor() services.AddHttpContextAccessor()
.AddStorage() .AddStorage(hostContext.Configuration)
.AddLogManager(); .AddLogManager();
var serviceProvider = services.BuildServiceProvider(); var serviceProvider = services.BuildServiceProvider();

View File

@ -103,7 +103,7 @@ namespace ASC.People
services.AddLogManager() services.AddLogManager()
.AddStorage() .AddStorage(Configuration)
.AddWebItemManager() .AddWebItemManager()
.AddSingleton((r) => .AddSingleton((r) =>
{ {

View File

@ -76,7 +76,7 @@ namespace ASC.Web.Api
var container = services.AddAutofac(Configuration, HostEnvironment.ContentRootPath); var container = services.AddAutofac(Configuration, HostEnvironment.ContentRootPath);
services.AddLogManager() services.AddLogManager()
.AddStorage() .AddStorage(Configuration)
.AddWebItemManager() .AddWebItemManager()
.AddScoped<ApiContext>() .AddScoped<ApiContext>()
.AddScoped<StudioNotifyService>() .AddScoped<StudioNotifyService>()
@ -108,7 +108,7 @@ namespace ASC.Web.Api
app.UseSession(); app.UseSession();
app.UseAuthentication(); app.UseAuthentication();
app.UseAuthorization(); app.UseAuthorization();
app.UseCultureMiddleware(); app.UseCultureMiddleware();

View File

@ -43,7 +43,7 @@ namespace ASC.Web.Studio
services.AddAuthentication("cookie").AddScheme<AuthenticationSchemeOptions, CookieAuthHandler>("cookie", a => { }); services.AddAuthentication("cookie").AddScheme<AuthenticationSchemeOptions, CookieAuthHandler>("cookie", a => { });
services.AddHttpContextAccessor() services.AddHttpContextAccessor()
.AddStorage() .AddStorage(Configuration)
.AddLogManager(); .AddLogManager();
} }