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>();
LogManager = serviceProvider.GetService<LogManager>();
ConnectionStrings = new ConnectionStringCollection(GetSettings<ConnectionStringSettings>("ConnectionStrings"));
ConnectionStrings = AppSettings.GetConnectionStrings();
}
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()
{
var result = new List<T>();
var sectionSettings = AppSettings.GetSection(section);
foreach (var ch in sectionSettings.GetChildren())
{
var cs = new T();
ch.Bind(cs);
result.Add(cs);
}
return result;
return AppSettings.GetSettings<T>(section);
}
public static T GetSetting<T>(string section) where T : new()
{
var sectionSettings = AppSettings.GetSection(section);
var cs = new T();
sectionSettings.Bind(cs);
return cs;
return AppSettings.GetSetting<T>(section);
}
}
@ -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.Utils;
using ASC.Core.Data;
using ASC.Core.Tenants;
using ASC.Core.Tenants;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Core.Billing
@ -45,10 +46,11 @@ namespace ASC.Core.Billing
private Timer timer;
public TariffSyncService(IServiceProvider serviceProvider)
public TariffSyncService(IServiceProvider serviceProvider, IConfiguration configuration)
{
config = TariffSyncServiceSection.GetSection();
ServiceProvider = serviceProvider;
Configuration = configuration;
}
@ -59,8 +61,8 @@ namespace ASC.Core.Billing
{
if (!quotaServices.ContainsKey(version))
{
var cs = ConfigurationManager.ConnectionStrings[config.ConnectionStringName + version] ??
ConfigurationManager.ConnectionStrings[config.ConnectionStringName];
var cs = Configuration.GetConnectionStrings(config.ConnectionStringName + version) ??
Configuration.GetConnectionStrings(config.ConnectionStringName);
quotaServices[version] = new DbQuotaService(cs).GetTenantQuotas();
}
return quotaServices[version];
@ -75,6 +77,7 @@ namespace ASC.Core.Billing
}
public IServiceProvider ServiceProvider { get; }
public IConfiguration Configuration { get; }
public void Start()
{
@ -100,7 +103,7 @@ namespace ASC.Core.Billing
{
var scope = ServiceProvider.CreateScope();
var tariffSync = scope.ServiceProvider.GetService<TariffSync>();
tariffSync.Sync(config);
tariffSync.Sync(config, Configuration);
}
catch (Exception error)
@ -119,13 +122,13 @@ namespace ASC.Core.Billing
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();
if (tenant != null)
{
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);
// save new

View File

@ -197,10 +197,13 @@ namespace ASC.Core
}
private void Initialize()
{
{
var connectionStrings = Configuraion.GetConnectionStrings();
var dbConnectionStrings = Configuraion.GetConnectionStrings(dbid);
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 + "."))
{
@ -209,17 +212,17 @@ namespace ASC.Core
}
}
regions[dbid] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
regions[dbid] = new HostedSolution(dbConnectionStrings);
if (!regions.ContainsKey(string.Empty))
{
regions[string.Empty] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
regions[string.Empty] = new HostedSolution(dbConnectionStrings);
}
}
else
{
var find = false;
foreach (var cs in ConfigurationManager.ConnectionStrings)
foreach (var cs in connectionStrings)
{
if (cs.Name.StartsWith(dbid + "."))
{
@ -230,15 +233,15 @@ namespace ASC.Core
}
if (find)
{
regions[dbid] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
regions[dbid] = new HostedSolution(dbConnectionStrings);
if (!regions.ContainsKey(string.Empty))
{
regions[string.Empty] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
regions[string.Empty] = new HostedSolution(dbConnectionStrings);
}
}
else
{
foreach (var connectionString in ConfigurationManager.ConnectionStrings)
foreach (var connectionString in connectionStrings)
{
try
{

View File

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

View File

@ -44,7 +44,7 @@ namespace ASC.Core.Common.Tests
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 ASC.Common.Utils;
using ASC.Core.Tenants;
using Microsoft.Extensions.Configuration;
using NUnit.Framework;
[TestFixture]
public class HostedSolutionTest
{
{
private IConfiguration Configuration { get; set; }
[Test]
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");
Assert.AreNotEqual(0, tenants.Count);
}

View File

@ -43,7 +43,7 @@ namespace ASC.Core.Common.Tests
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 baseSettings = new CoreBaseSettings(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.Linq;
using ASC.Core.Billing;
using Microsoft.Extensions.Configuration;
using NUnit.Framework;
[TestFixture]
@ -37,11 +38,12 @@ namespace ASC.Core.Common.Tests
{
private readonly ITariffSyncService tariffSyncService;
public IServiceProvider ServiceProvider { get; set; }
public IServiceProvider ServiceProvider { get; set; }
public IConfiguration Configuration { get; set; }
public TariffSyncServiceTest()
{
tariffSyncService = new TariffSyncService(ServiceProvider);
tariffSyncService = new TariffSyncService(ServiceProvider, Configuration);
}
[Test]

View File

@ -2,15 +2,16 @@
using System.Collections.Generic;
using System.Linq;
using ASC.Common.Utils;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Data.Storage.Configuration
{
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.FederatedLogin.Profile;
using ASC.Security.Cryptography;
using Microsoft.Extensions.Configuration;
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))
_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.Utils;
using CommandLine;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace ASC.Resource.Manager
@ -63,7 +64,7 @@ namespace ASC.Resource.Manager
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();
projects = ResourceData.GetAllFiles();

View File

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

View File

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

View File

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

View File

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

View File

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