using Dapper; using EnvelopeGenerator.Application.Contracts.SQLExecutor; using Microsoft.Data.SqlClient; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace EnvelopeGenerator.Infrastructure; public class SQLExecutor : ISQLExecutor { private readonly SQLExecutorParams _params; private readonly IServiceProvider _provider; public SQLExecutor(IServiceProvider provider, IOptions sqlExecutorParamsOptions) { _provider = provider; _params = sqlExecutorParamsOptions.Value; } public async Task> Execute(string sql, DynamicParameters parameters, CancellationToken cancellation = default) { using var connection = new SqlConnection(_params.ConnectionString); await connection.OpenAsync(cancellation); return await connection.QueryAsync(sql, parameters); } public Task> Execute(DynamicParameters parameters, CancellationToken cancellation = default) where TSQL : ISQL { var sql = _provider.GetRequiredService(); return Execute(sql.Raw, parameters, cancellation); } }