Добавьте файлы проекта.

This commit is contained in:
Курнат Андрей
2026-04-04 10:52:30 +03:00
parent 9b34a92f15
commit 5a55bc5f4c
30 changed files with 3446 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
using CRAWLER.Configuration;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
namespace CRAWLER.Services;
internal interface IDatabaseConnectionFactory
{
SqlConnection CreateConnection();
SqlConnection CreateMasterConnection();
DatabaseOptions Options { get; }
}
internal sealed class SqlServerConnectionFactory : IDatabaseConnectionFactory
{
public SqlServerConnectionFactory(IConfiguration configuration)
{
Options = configuration.GetSection("Database").Get<DatabaseOptions>()
?? throw new InvalidOperationException("Раздел Database не найден в appsettings.json.");
}
public DatabaseOptions Options { get; }
public SqlConnection CreateConnection()
{
return new SqlConnection(BuildConnectionString(Options.Database));
}
public SqlConnection CreateMasterConnection()
{
return new SqlConnection(BuildConnectionString("master"));
}
private string BuildConnectionString(string databaseName)
{
var builder = new SqlConnectionStringBuilder
{
ApplicationName = Options.ApplicationName,
DataSource = Options.Server,
InitialCatalog = databaseName,
ConnectTimeout = Options.ConnectTimeoutSeconds,
Encrypt = Options.Encrypt,
IntegratedSecurity = Options.IntegratedSecurity,
MultipleActiveResultSets = Options.MultipleActiveResultSets,
Pooling = Options.Pooling,
MaxPoolSize = Options.MaxPoolSize,
MinPoolSize = Options.MinPoolSize,
TrustServerCertificate = Options.TrustServerCertificate,
ConnectRetryCount = Options.ConnectRetryCount,
ConnectRetryInterval = Options.ConnectRetryIntervalSeconds
};
return builder.ConnectionString;
}
}