diff --git a/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeSQL.cs b/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeSQL.cs
new file mode 100644
index 00000000..f07daffa
--- /dev/null
+++ b/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeSQL.cs
@@ -0,0 +1,14 @@
+using EnvelopeGenerator.Application.Contracts.SQLExecutor;
+using EnvelopeGenerator.Domain.Entities;
+
+namespace EnvelopeGenerator.Application.Envelopes.Commands;
+///
+///
+///
+public class CreateEnvelopeSQL : ISQL
+{
+ ///
+ ///
+ ///
+ public string Raw => string.Empty;
+}
diff --git a/EnvelopeGenerator.Infrastructure/DIExtensions.cs b/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs
similarity index 78%
rename from EnvelopeGenerator.Infrastructure/DIExtensions.cs
rename to EnvelopeGenerator.Infrastructure/DependencyExtensions.cs
index c457d264..1f731b2b 100644
--- a/EnvelopeGenerator.Infrastructure/DIExtensions.cs
+++ b/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs
@@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using DigitalData.Core.Infrastructure;
using EnvelopeGenerator.Domain.Entities;
using DigitalData.Core.Infrastructure.AutoMapper;
+using EnvelopeGenerator.Application.Contracts.SQLExecutor;
namespace EnvelopeGenerator.Infrastructure;
@@ -59,6 +60,42 @@ public static class DIExtensions
services.AddDbRepository(context => context.UserReceivers).UseAutoMapper();
services.AddDbRepository(context => context.EnvelopeReceiverReadOnlys).UseAutoMapper();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+
+ return services;
+ }
+
+ public static IServiceCollection AddSQLExecutor(this IServiceCollection services) where T : class
+ {
+ services.AddSingleton, SQLExecutor>();
+
+ var interfaceType = typeof(ISQL<>);
+ var targetGenericType = interfaceType.MakeGenericType(typeof(T));
+
+ var implementations = AppDomain.CurrentDomain.GetAssemblies()
+ .SelectMany(a =>
+ {
+ try { return a.GetTypes(); }
+ catch { return Array.Empty(); }
+ })
+ .Where(t =>
+ t is { IsClass: true, IsAbstract: false } &&
+ t.GetInterfaces().Any(i =>
+ i.IsGenericType &&
+ i.GetGenericTypeDefinition() == interfaceType &&
+ i.GenericTypeArguments[0] == typeof(T)
+ )
+ );
+
+ foreach (var impl in implementations)
+ {
+ services.AddSingleton(impl);
+ }
+
return services;
}
}