diff --git a/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs b/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs
index 484bee9b..88fba5ab 100644
--- a/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs
+++ b/EnvelopeGenerator.Infrastructure/DependencyExtensions.cs
@@ -1,157 +1,177 @@
-using EnvelopeGenerator.Infrastructure.Repositories;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.EntityFrameworkCore;
using DigitalData.Core.Infrastructure;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.Extensions.Configuration;
-using EnvelopeGenerator.Infrastructure.Executor;
using Dapper;
using System.ComponentModel.DataAnnotations.Schema;
using System.Reflection;
using DigitalData.UserManager.Domain.Entities;
+#if NET
+using EnvelopeGenerator.Infrastructure.Repositories;
+using EnvelopeGenerator.Infrastructure.Executor;
using EnvelopeGenerator.Application.Common.Interfaces.Repositories;
using EnvelopeGenerator.Application.Common.Interfaces.SQLExecutor;
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
+#elif NETFRAMEWORK
+using System;
+#endif
-namespace EnvelopeGenerator.Infrastructure;
-
-public static class DIExtensions
+namespace EnvelopeGenerator.Infrastructure
{
- ///
- /// Registers the required repositories for the Envelope Generator service to the given .
- /// This method adds the repositories for various envelope-related entities, such as configuration, document receivers, envelopes, and users,
- /// as scoped services to the dependency injection container. Optionally, it can also configure the
- /// with the provided database context options if specified.
- ///
- /// The to which the services are added.
- /// An optional action to configure the for the .
- /// If not provided, the will not be configured.
- /// The updated with the added repository services.
- ///
- /// This method ensures that the repositories are registered as scoped services, meaning that a new instance of each repository
- /// will be created per HTTP request (or per scope) within the dependency injection container.
- ///
- [Obsolete("Use IRepository")]
- public static IServiceCollection AddEnvelopeGeneratorInfrastructureServices(this IServiceCollection services,
- Action? dbContextOptions = null,
- IConfiguration? sqlExecutorConfiguration = null,
- Action? sqlExecutorConfigureOptions = null)
+ public static class DIExtensions
{
- if(dbContextOptions is not null)
- services.AddDbContext(dbContextOptions);
-
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
- services.TryAddScoped();
-
- services.AddDbRepository(opt =>
+ ///
+ /// Registers the required repositories for the Envelope Generator service to the given .
+ /// This method adds the repositories for various envelope-related entities, such as configuration, document receivers, envelopes, and users,
+ /// as scoped services to the dependency injection container. Optionally, it can also configure the
+ /// with the provided database context options if specified.
+ ///
+ /// The to which the services are added.
+ /// An optional action to configure the for the .
+ /// If not provided, the will not be configured.
+ /// The updated with the added repository services.
+ ///
+ /// This method ensures that the repositories are registered as scoped services, meaning that a new instance of each repository
+ /// will be created per HTTP request (or per scope) within the dependency injection container.
+ ///
+ [Obsolete("Use IRepository")]
+ public static IServiceCollection AddEnvelopeGeneratorInfrastructureServices(this IServiceCollection services,
+ Action
+#if NET
+ ?
+#endif
+ dbContextOptions = null
+#if NET
+ , IConfiguration? sqlExecutorConfiguration = null,
+ Action? sqlExecutorConfigureOptions = null
+#endif
+ )
{
- // scan EnvelopeGenerator
- opt.RegisterFromAssembly(typeof(Config).Assembly);
+ if (dbContextOptions != null)
+ services.AddDbContext(dbContextOptions);
- // scan UserManager
- opt.RegisterFromAssembly(typeof(User).Assembly);
+#if NET
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+ services.TryAddScoped();
+#endif
- // scan EmailProfilerDispatcher
- opt.RegisterFromAssembly(typeof(EmailOut).Assembly);
- });
-
- services.AddSQLExecutor();
- services.AddSQLExecutor();
- services.AddSQLExecutor();
- services.AddSQLExecutor();
- services.AddSQLExecutor();
-
- SetDapperTypeMap();
- SetDapperTypeMap();
- SetDapperTypeMap();
- SetDapperTypeMap();
- SetDapperTypeMap();
- SetDapperTypeMap();
-
- services.AddScoped();
- services.AddScoped();
- services.AddScoped();
-
- if (sqlExecutorConfiguration is not null || sqlExecutorConfigureOptions is not null)
- services.AddSQLExecutor(sqlExecutorConfiguration, sqlExecutorConfigureOptions);
-
- return services;
- }
-
- public static IServiceCollection AddSQLExecutor(this IServiceCollection services, IConfiguration? configuration = null, Action? configureOptions = null)
- {
- if(configuration is not null && configureOptions is not null)
- throw new InvalidOperationException("Cannot use both 'configuration' and 'configureOptions'. Only one should be provided.");
-
- if (configuration is not null)
- services.Configure(configuration);
-
- if(configureOptions is not null)
- services.Configure(configureOptions);
-
- return services.AddSingleton();
- }
-
- private static void SetDapperTypeMap()
- {
- Dapper.SqlMapper.SetTypeMap(typeof(TModel), new CustomPropertyTypeMap(
- typeof(TModel),
- (type, columnName) =>
+ services.AddDbRepository(opt =>
{
- return type.GetProperties().FirstOrDefault(prop =>
- {
- var attr = prop.GetCustomAttribute();
- return attr != null && string.Equals(attr.Name, columnName, StringComparison.OrdinalIgnoreCase)
- || string.Equals(prop.Name, columnName, StringComparison.OrdinalIgnoreCase);
- })!;
- }
- ));
- }
+ // scan EnvelopeGenerator
+ opt.RegisterFromAssembly(typeof(Config).Assembly);
- public static IServiceCollection AddSQLExecutor(this IServiceCollection services, IConfiguration? configuration = null, Action? configureOptions = null) where T : class
- {
- if (configuration is not null && configureOptions is not null)
- throw new InvalidOperationException("Cannot use both 'configuration' and 'configureOptions'. Only one should be provided.");
+ // scan UserManager
+ opt.RegisterFromAssembly(typeof(User).Assembly);
- if (configuration is not null)
- services.Configure(configuration);
+#if NET
+ // scan EmailProfilerDispatcher
+ opt.RegisterFromAssembly(typeof(EmailOut).Assembly);
+#endif
+ });
- services.AddScoped, SQLExecutor>();
+#if NET
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
+ services.AddSQLExecutor();
- var interfaceType = typeof(ISQL<>);
- var targetGenericType = interfaceType.MakeGenericType(typeof(T));
+ SetDapperTypeMap();
+ SetDapperTypeMap();
+ SetDapperTypeMap();
+ SetDapperTypeMap();
+ SetDapperTypeMap();
+ SetDapperTypeMap();
- 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)
- )
- );
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
- foreach (var impl in implementations)
- {
- services.AddSingleton(impl);
+ if (sqlExecutorConfiguration is not null || sqlExecutorConfigureOptions is not null)
+ services.AddSQLExecutor(sqlExecutorConfiguration, sqlExecutorConfigureOptions);
+#endif
+
+ return services;
}
- return services;
+#if NET
+ public static IServiceCollection AddSQLExecutor(this IServiceCollection services, IConfiguration? configuration = null, Action? configureOptions = null)
+ {
+ if (configuration is not null && configureOptions is not null)
+ throw new InvalidOperationException("Cannot use both 'configuration' and 'configureOptions'. Only one should be provided.");
+
+ if (configuration is not null)
+ services.Configure(configuration);
+
+ if (configureOptions is not null)
+ services.Configure(configureOptions);
+
+ return services.AddSingleton();
+ }
+
+ private static void SetDapperTypeMap()
+ {
+ Dapper.SqlMapper.SetTypeMap(typeof(TModel), new CustomPropertyTypeMap(
+ typeof(TModel),
+ (type, columnName) =>
+ {
+ return type.GetProperties().FirstOrDefault(prop =>
+ {
+ var attr = prop.GetCustomAttribute();
+ return attr != null && string.Equals(attr.Name, columnName, StringComparison.OrdinalIgnoreCase)
+ || string.Equals(prop.Name, columnName, StringComparison.OrdinalIgnoreCase);
+ })!;
+ }
+ ));
+ }
+
+ public static IServiceCollection AddSQLExecutor(this IServiceCollection services, IConfiguration? configuration = null, Action? configureOptions = null) where T : class
+ {
+ if (configuration is not null && configureOptions is not null)
+ throw new InvalidOperationException("Cannot use both 'configuration' and 'configureOptions'. Only one should be provided.");
+
+ if (configuration is not null)
+ services.Configure(configuration);
+
+ services.AddScoped, 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;
+ }
+#endif
}
}
\ No newline at end of file