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; } }