diff --git a/common/ASC.Common/Data/MultiRegionalDbManager.cs b/common/ASC.Common/Data/MultiRegionalDbManager.cs index eac4831bd4..186aaa2ade 100644 --- a/common/ASC.Common/Data/MultiRegionalDbManager.cs +++ b/common/ASC.Common/Data/MultiRegionalDbManager.cs @@ -31,7 +31,9 @@ using System.Data.Common; using System.Linq; using System.Threading.Tasks; using ASC.Common.Data.Sql; - +using ASC.Common.Utils; +using Microsoft.Extensions.Configuration; + namespace ASC.Common.Data { public class MultiRegionalDbManager : IDbManager @@ -52,11 +54,11 @@ namespace ASC.Common.Data } - public MultiRegionalDbManager(DbRegistry dbRegistry, string dbId) + public MultiRegionalDbManager(IConfiguration configuration, DbRegistry dbRegistry, string dbId) { const StringComparison cmp = StringComparison.InvariantCultureIgnoreCase; DatabaseId = dbId; - databases = Utils.ConfigurationManager.ConnectionStrings + databases = configuration.GetConnectionStrings() .Where(c => c.Name.Equals(dbId, cmp) || c.Name.StartsWith(dbId + ".", cmp)) .Select( c => @@ -83,9 +85,9 @@ namespace ASC.Common.Data } } - public static MultiRegionalDbManager FromHttpContext(DbRegistry dbRegistry, string databaseId) + public static MultiRegionalDbManager FromHttpContext(IConfiguration configuration, DbRegistry dbRegistry, string databaseId) { - return new MultiRegionalDbManager(dbRegistry, databaseId); + return new MultiRegionalDbManager(configuration, dbRegistry, databaseId); } public IDbTransaction BeginTransaction(IsolationLevel isolationLevel) diff --git a/common/ASC.Common/Tests/Data/MultiRegionalDbTest.cs b/common/ASC.Common/Tests/Data/MultiRegionalDbTest.cs index 64ceec3df3..67230a8279 100644 --- a/common/ASC.Common/Tests/Data/MultiRegionalDbTest.cs +++ b/common/ASC.Common/Tests/Data/MultiRegionalDbTest.cs @@ -36,7 +36,7 @@ namespace ASC.Common.Tests.Data [Test] public void ExecuteListTest() { - using var db = new MultiRegionalDbManager(null, "core"); + using var db = new MultiRegionalDbManager(null, null, "core"); var r1 = db.ExecuteList("select 1"); Assert.IsTrue(r1.Count > 1); } diff --git a/common/ASC.Common/Utils/ConfigurationManager.cs b/common/ASC.Common/Utils/ConfigurationManager.cs index e77b59d8af..2085ba98d3 100644 --- a/common/ASC.Common/Utils/ConfigurationManager.cs +++ b/common/ASC.Common/Utils/ConfigurationManager.cs @@ -13,23 +13,18 @@ namespace ASC.Common.Utils public static class ConfigurationManager { public static IConfiguration AppSettings { get; private set; } - public static ConnectionStringCollection ConnectionStrings { get; private set; } public static LogManager LogManager { get; private set; } public static void Init(IServiceProvider serviceProvider) { AppSettings = serviceProvider.GetService(); LogManager = serviceProvider.GetService(); - ConnectionStrings = AppSettings.GetConnectionStrings(); } public static void UseCm(this IApplicationBuilder applicationBuilder) { Init(applicationBuilder.ApplicationServices); } - public static IEnumerable GetSettings(string section) where T : new() - { - return AppSettings.GetSettings(section); - } + public static T GetSetting(string section) where T : new() { return AppSettings.GetSetting(section); diff --git a/common/ASC.Core.Common/HostedSolution.cs b/common/ASC.Core.Common/HostedSolution.cs index 8922657571..c197fca6e8 100644 --- a/common/ASC.Core.Common/HostedSolution.cs +++ b/common/ASC.Core.Common/HostedSolution.cs @@ -30,7 +30,6 @@ using System.Configuration; using System.Linq; using System.Security; using ASC.Common.Data; -using ASC.Common.DependencyInjection; using ASC.Common.Utils; using ASC.Core.Billing; using ASC.Core.Data; @@ -64,25 +63,20 @@ namespace ASC.Core private set; } - public HostedSolution(ConnectionStringSettings connectionString) - : this(connectionString, null) + public HostedSolution(IConfiguration configuration, TenantDomainValidator tenantDomainValidator, TimeZoneConverter timeZoneConverter, DbRegistry dbRegistry, ConnectionStringSettings connectionString) + : this(configuration, tenantDomainValidator, timeZoneConverter, dbRegistry, connectionString, null) { } - public HostedSolution(ConnectionStringSettings connectionString, string region) - { - var configuration = CommonServiceProvider.GetService(); - var TenantDomainValidator = CommonServiceProvider.GetService(); - var TimeZoneConverter = CommonServiceProvider.GetService(); - var DbRegistry = CommonServiceProvider.GetService(); - - tenantService = new DbTenantService(connectionString, DbRegistry, TenantDomainValidator, TimeZoneConverter); + public HostedSolution(IConfiguration configuration, TenantDomainValidator tenantDomainValidator, TimeZoneConverter timeZoneConverter, DbRegistry dbRegistry, ConnectionStringSettings connectionString, string region) + { + tenantService = new DbTenantService(connectionString, dbRegistry, tenantDomainValidator, timeZoneConverter); var baseSettings = new CoreBaseSettings(configuration); var coreSettings = new CoreSettings(tenantService, baseSettings, configuration); - userService = new DbUserService(connectionString, DbRegistry); - quotaService = new DbQuotaService(connectionString, DbRegistry); - tariffService = new TariffService(connectionString, quotaService, tenantService, baseSettings, coreSettings, configuration, DbRegistry); + userService = new DbUserService(connectionString, dbRegistry); + quotaService = new DbQuotaService(connectionString, dbRegistry); + tariffService = new TariffService(connectionString, quotaService, tenantService, baseSettings, coreSettings, configuration, dbRegistry); clientTenantManager = new TenantManager(tenantService, quotaService, tariffService, null, baseSettings, coreSettings); settingsManager = new DbSettingsManager(connectionString); Region = region ?? string.Empty; diff --git a/common/ASC.Core.Common/MultiRegionHostedSolution.cs b/common/ASC.Core.Common/MultiRegionHostedSolution.cs index fc28803517..7bbab9e7d8 100644 --- a/common/ASC.Core.Common/MultiRegionHostedSolution.cs +++ b/common/ASC.Core.Common/MultiRegionHostedSolution.cs @@ -45,13 +45,22 @@ namespace ASC.Core private readonly string dbid; public IConfiguration Configuraion { get; } + public TenantDomainValidator TenantDomainValidator { get; } + public TimeZoneConverter TimeZoneConverter { get; } public InstanceCrypto InstanceCrypto { get; } public DbRegistry DbRegistry { get; } - public MultiRegionHostedSolution(string dbid, IConfiguration configuraion, InstanceCrypto instanceCrypto, DbRegistry dbRegistry) + public MultiRegionHostedSolution(string dbid, + IConfiguration configuraion, + TenantDomainValidator tenantDomainValidator, + TimeZoneConverter timeZoneConverter, + InstanceCrypto instanceCrypto, + DbRegistry dbRegistry) { this.dbid = dbid; Configuraion = configuraion; + TenantDomainValidator = tenantDomainValidator; + TimeZoneConverter = timeZoneConverter; InstanceCrypto = instanceCrypto; DbRegistry = dbRegistry; Initialize(); @@ -210,14 +219,14 @@ namespace ASC.Core if (cs.Name.StartsWith(dbid + ".")) { var name = cs.Name.Substring(dbid.Length + 1); - regions[name] = new HostedSolution(cs, name); + regions[name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, name); } } - regions[dbid] = new HostedSolution(dbConnectionStrings); + regions[dbid] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings); if (!regions.ContainsKey(string.Empty)) { - regions[string.Empty] = new HostedSolution(dbConnectionStrings); + regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings); } } else @@ -229,16 +238,16 @@ namespace ASC.Core if (cs.Name.StartsWith(dbid + ".")) { var name = cs.Name.Substring(dbid.Length + 1); - regions[name] = new HostedSolution(cs, name); + regions[name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, name); find = true; } } if (find) { - regions[dbid] = new HostedSolution(dbConnectionStrings); + regions[dbid] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings); if (!regions.ContainsKey(string.Empty)) { - regions[string.Empty] = new HostedSolution(dbConnectionStrings); + regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings); } } else @@ -263,10 +272,10 @@ namespace ASC.Core if (!regions.ContainsKey(string.Empty)) { - regions[string.Empty] = new HostedSolution(cs, cs.Name); + regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, cs.Name); } - regions[cs.Name] = new HostedSolution(cs, cs.Name); + regions[cs.Name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, cs.Name); }); } catch (DbException) { } diff --git a/common/ASC.Core.Common/Tests/HostedSolutionTest.cs b/common/ASC.Core.Common/Tests/HostedSolutionTest.cs index 1e31368c81..74b46d9618 100644 --- a/common/ASC.Core.Common/Tests/HostedSolutionTest.cs +++ b/common/ASC.Core.Common/Tests/HostedSolutionTest.cs @@ -40,7 +40,7 @@ namespace ASC.Core.Common.Tests [Test] public void FindTenants() { - var h = new HostedSolution(Configuration.GetConnectionStrings("core")); + var h = new HostedSolution(null, null, null, null, Configuration.GetConnectionStrings("core")); var tenants = h.FindTenants("76ff727b-f987-4871-9834-e63d4420d6e9"); Assert.AreNotEqual(0, tenants.Count); } @@ -55,7 +55,7 @@ namespace ASC.Core.Common.Tests [Test] public void RegionsTest() { - var regionSerice = new MultiRegionHostedSolution("site", null, null, null); + var regionSerice = new MultiRegionHostedSolution("site", null, null, null, null, null); var t1 = regionSerice.GetTenant("teamlab.com", 50001); Assert.AreEqual("alias_test2.teamlab.com", t1.TenantDomain);