Добавьте файлы проекта.
This commit is contained in:
55
Services/SqlServerConnectionFactory.cs
Normal file
55
Services/SqlServerConnectionFactory.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user