Files
Umbraco-CMS/src/Umbraco.Infrastructure/Persistence/DbProviderFactoryCreator.cs
Zeegaan 35549ca218 Merge branch 'release/10.0.1' into v10/dev
# Conflicts:
#	src/Umbraco.Core/Actions/ActionAssignDomain.cs
#	src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs
#	src/Umbraco.Core/Models/RelationItem.cs
#	src/Umbraco.Core/Scoping/ICoreScope.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
#	src/Umbraco.Infrastructure/HostedServices/ReportSiteTask.cs
#	src/Umbraco.Infrastructure/Logging/MessageTemplates.cs
#	src/Umbraco.Infrastructure/Persistence/DbProviderFactoryCreator.cs
#	src/Umbraco.Infrastructure/Runtime/FileSystemMainDomLock.cs
#	src/Umbraco.Infrastructure/Scoping/ScopeProvider.cs
#	src/Umbraco.Web.BackOffice/Filters/OutgoingEditorModelEventAttribute.cs
#	src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs
#	tests/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopedNotificationPublisherTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Scoping/ScopeUnitTests.cs
#	version.json
2022-06-30 09:48:24 +02:00

103 lines
4.2 KiB
C#

using System.Data.Common;
using NPoco;
using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax;
namespace Umbraco.Cms.Infrastructure.Persistence;
public class DbProviderFactoryCreator : IDbProviderFactoryCreator
{
private readonly IDictionary<string, IBulkSqlInsertProvider> _bulkSqlInsertProviders;
private readonly IDictionary<string, IDatabaseCreator> _databaseCreators;
private readonly Func<string, DbProviderFactory> _getFactory;
private readonly IEnumerable<IProviderSpecificInterceptor> _providerSpecificInterceptors;
private readonly IDictionary<string, IProviderSpecificMapperFactory> _providerSpecificMapperFactories;
private readonly IDictionary<string, ISqlSyntaxProvider> _syntaxProviders;
[Obsolete("Please use an alternative constructor.")]
public DbProviderFactoryCreator(
Func<string, DbProviderFactory> getFactory,
IEnumerable<ISqlSyntaxProvider> syntaxProviders,
IEnumerable<IBulkSqlInsertProvider> bulkSqlInsertProviders,
IEnumerable<IDatabaseCreator> databaseCreators,
IEnumerable<IProviderSpecificMapperFactory> providerSpecificMapperFactories)
: this(
getFactory,
syntaxProviders,
bulkSqlInsertProviders,
databaseCreators,
providerSpecificMapperFactories,
Enumerable.Empty<IProviderSpecificInterceptor>())
{
}
public DbProviderFactoryCreator(
Func<string, DbProviderFactory> getFactory,
IEnumerable<ISqlSyntaxProvider> syntaxProviders,
IEnumerable<IBulkSqlInsertProvider> bulkSqlInsertProviders,
IEnumerable<IDatabaseCreator> databaseCreators,
IEnumerable<IProviderSpecificMapperFactory> providerSpecificMapperFactories,
IEnumerable<IProviderSpecificInterceptor> providerSpecificInterceptors)
{
_getFactory = getFactory;
_providerSpecificInterceptors = providerSpecificInterceptors;
_databaseCreators = databaseCreators.ToDictionary(x => x.ProviderName, StringComparer.InvariantCultureIgnoreCase);
_syntaxProviders = syntaxProviders.ToDictionary(x => x.ProviderName, StringComparer.InvariantCultureIgnoreCase);
_bulkSqlInsertProviders = bulkSqlInsertProviders.ToDictionary(x => x.ProviderName, StringComparer.InvariantCultureIgnoreCase);
_providerSpecificMapperFactories = providerSpecificMapperFactories.ToDictionary(x => x.ProviderName, StringComparer.InvariantCultureIgnoreCase);
}
public DbProviderFactory? CreateFactory(string? providerName)
{
if (string.IsNullOrEmpty(providerName))
{
return null;
}
return _getFactory(providerName);
}
// gets the sql syntax provider that corresponds, from attribute
public ISqlSyntaxProvider GetSqlSyntaxProvider(string providerName)
{
if (!_syntaxProviders.TryGetValue(providerName, out ISqlSyntaxProvider? result))
{
throw new InvalidOperationException($"Unknown provider name \"{providerName}\"");
}
return result;
}
public IBulkSqlInsertProvider CreateBulkSqlInsertProvider(string providerName)
{
if (!_bulkSqlInsertProviders.TryGetValue(providerName, out IBulkSqlInsertProvider? result))
{
throw new InvalidOperationException($"Unknown provider name \"{providerName}\"");
}
return result;
}
public void CreateDatabase(string providerName, string connectionString)
{
if (_databaseCreators.TryGetValue(providerName, out IDatabaseCreator? creator))
{
creator.Create(connectionString);
}
}
public NPocoMapperCollection ProviderSpecificMappers(string providerName)
{
if (_providerSpecificMapperFactories.TryGetValue(
providerName,
out IProviderSpecificMapperFactory? mapperFactory))
{
return mapperFactory.Mappers;
}
return new NPocoMapperCollection(() => Enumerable.Empty<IMapper>());
}
public IEnumerable<IProviderSpecificInterceptor> GetProviderSpecificInterceptors(string providerName)
=> _providerSpecificInterceptors.Where(x => x.ProviderName.Equals(providerName, StringComparison.InvariantCultureIgnoreCase));
}