using System; using System.Linq; using ASC.Common; using ASC.Common.Logging; using ASC.Common.Utils; using Microsoft.Extensions.Options; namespace ASC.Core.Common.EF { [Scope] public class ConfigureDbContext : IConfigureNamedOptions where T : BaseDbContext, new() { public const string baseName = "default"; private EFLoggerFactory LoggerFactory { get; } private ConfigurationExtension Configuration { get; } private string MigrateAssembly { get; } public ConfigureDbContext(EFLoggerFactory loggerFactory, ConfigurationExtension configuration) { LoggerFactory = loggerFactory; Configuration = configuration; MigrateAssembly = Configuration["testAssembly"]; } public void Configure(string name, T context) { context.LoggerFactory = LoggerFactory; context.ConnectionStringSettings = Configuration.GetConnectionStrings(name) ?? Configuration.GetConnectionStrings(baseName); context.MigrateAssembly = MigrateAssembly; } public void Configure(T context) { Configure(baseName, context); } } public class ConfigureMultiRegionalDbContext : IConfigureNamedOptions> where T : BaseDbContext, new() { public string baseName = "default"; private ConfigurationExtension Configuration { get; } private DbContextManager DbContext { get; } public ConfigureMultiRegionalDbContext(ConfigurationExtension configuration, DbContextManager dbContext) { Configuration = configuration; DbContext = dbContext; } public void Configure(string name, MultiRegionalDbContext context) { context.Context = new System.Collections.Generic.List(); const StringComparison cmp = StringComparison.InvariantCultureIgnoreCase; foreach (var c in Configuration.GetConnectionStrings().Where(r => r.Name.Equals(name, cmp) || r.Name.StartsWith(name + ".", cmp) || r.Name.Equals(baseName, cmp) || r.Name.StartsWith(baseName + ".", cmp) )) { context.Context.Add(DbContext.Get(c.Name)); } } public void Configure(MultiRegionalDbContext context) { Configure(baseName, context); } } }