From 841da3c26133e931e37da8af410010431c85f8d3 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 5 May 2025 00:31:58 +0200 Subject: [PATCH] Refactor DI extensions and add SQL executor support Removed `DIExtensions.cs` and integrated its content into `DependencyExtensions.cs`, enhancing the dependency injection setup with repository and SQL executor registrations. Added a new `CreateEnvelopeSQL` class implementing the `ISQL` interface, currently with a placeholder implementation. --- .../Envelopes/Commands/CreateEnvelopeSQL.cs | 14 +++++++ ...IExtensions.cs => DependencyExtensions.cs} | 37 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeSQL.cs rename EnvelopeGenerator.Infrastructure/{DIExtensions.cs => DependencyExtensions.cs} (78%) 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; } }