diff --git a/src/core/DigitalData.MessagingService.Application/DependencyInjection/MessagingServiceApplicationConfiguration.cs b/src/core/DigitalData.MessagingService.Application/DependencyInjection/MessagingServiceApplicationConfiguration.cs index ec82c2b..326ee91 100644 --- a/src/core/DigitalData.MessagingService.Application/DependencyInjection/MessagingServiceApplicationConfiguration.cs +++ b/src/core/DigitalData.MessagingService.Application/DependencyInjection/MessagingServiceApplicationConfiguration.cs @@ -1,5 +1,4 @@ #if NET -using DigitalData.MessagingService.Application.Common.Options; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -9,7 +8,7 @@ public partial class MessagingServiceApplicationConfiguration { private IServiceCollection Services { get; } - private (bool LuckyPennySoftLicenseKey, bool EmailAccounts) _configured = (LuckyPennySoftLicenseKey: false, EmailAccounts: false); + private bool _luckyPennySoftLicenseKeyAdded = false; internal MessagingServiceApplicationConfiguration(IServiceCollection services) { @@ -18,14 +17,10 @@ public partial class MessagingServiceApplicationConfiguration internal void EnsureConfigured() { - if (!_configured.LuckyPennySoftLicenseKey) + if (!_luckyPennySoftLicenseKeyAdded) { throw new InvalidOperationException("LuckyPennySoftLicenseKey is not configured. Please call SetLuckyPennySoftLicenseKey() or SetLuckyPennySoftLicenseKey(IConfiguration) in DI configuration."); } - if (!_configured.EmailAccounts) - { - throw new InvalidOperationException("EmailAccountsOptions is not configured. Please call ConfigureEmailAccountsOptions() or ConfigureEmailAccounts(IConfiguration) in DI configuration."); - } } #region LuckyPennySoftLicenseKey @@ -37,7 +32,7 @@ public partial class MessagingServiceApplicationConfiguration throw new InvalidOperationException("LuckyPennySoftLicenseKey is not configured. Please call SetLuckyPennySoftLicenseKey() or SetLuckyPennySoftLicenseKey(IConfiguration) in DI configuration."); LuckyPennySoftLicenseKey = licenseKey; - _configured.LuckyPennySoftLicenseKey = true; + _luckyPennySoftLicenseKeyAdded = true; return this; } @@ -46,33 +41,5 @@ public partial class MessagingServiceApplicationConfiguration return SetLuckyPennySoftLicenseKey(configuration.GetValue(key) ?? string.Empty); } #endregion LuckyPennySoftLicenseKey - - #region EmailAccountsOptions - /// - /// Ignores whether EmailAccountsOptions is configured or not. Use this method if you just want to publish messages to the messaging service; not to send - /// emails. If you want to consume the messaging service to send emails, you must configure EmailAccountsOptions using ConfigureEmailAccountsOptions() or - /// ConfigureEmailAccounts(IConfiguration). - /// - /// - public MessagingServiceApplicationConfiguration PublishOnly() - { - _configured.EmailAccounts = true; - return this; - } - - public MessagingServiceApplicationConfiguration ConfigureEmailAccountsOptions(Action configureOptions) - { - Services.Configure(configureOptions); - _configured.EmailAccounts = true; - return this; - } - - public MessagingServiceApplicationConfiguration ConfigureEmailAccounts(IConfiguration configuration, string sectionName = EmailAccountsOptions.SectionName) - { - Services.Configure(configuration.GetSection(sectionName)); - _configured.EmailAccounts = true; - return this; - } - #endregion EmailAccountsOptions } #endif \ No newline at end of file diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/DigitalData.MessagingService.Infrastructure.csproj b/src/infrastructure/DigitalData.MessagingService.Infrastructure/DigitalData.MessagingService.Infrastructure.csproj index d7d6d9d..5dab655 100644 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/DigitalData.MessagingService.Infrastructure.csproj +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/DigitalData.MessagingService.Infrastructure.csproj @@ -38,8 +38,4 @@ - - - - diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs index b085f5d..0558aa6 100644 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs @@ -1,4 +1,5 @@ -using DigitalData.MessagingService.RabbitMQ; +using DigitalData.MessagingService.Infrastructure.Options; +using DigitalData.MessagingService.RabbitMQ; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -8,7 +9,7 @@ public class MessagingServiceInfrastructureConfiguration { internal IServiceCollection Services { get; } - private bool _rabbitMqConnectionFactoryAdded = false; + private (bool RabbitMqConnectionFactory, bool EmailAccounts) _configured = (false, false); internal MessagingServiceInfrastructureConfiguration(IServiceCollection services) { @@ -17,24 +18,44 @@ public class MessagingServiceInfrastructureConfiguration public void EnsureRabbitMqConnectionFactoryAdded() { - if (!_rabbitMqConnectionFactoryAdded) + if (!_configured.RabbitMqConnectionFactory) { throw new InvalidOperationException("RabbitMQ connection factory has not been added. Please call AddRabbitMqConnectionFactory() before using this configuration."); } + if(!_configured.EmailAccounts) + { + throw new InvalidOperationException("Email accounts options have not been configured. Please call ConfigureEmailAccountsOptions() or ConfigureEmailAccounts() before using this configuration."); + } } public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(Action configure) { Services.AddRabbitMqConnectionFactory(configure); - _rabbitMqConnectionFactoryAdded = true; + _configured.RabbitMqConnectionFactory = true; return this; } public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(IConfiguration configuration, string sectionName = RabbitMqConfiguration.SectionName) { Services.AddRabbitMqConnectionFactory(configuration, sectionName); - _rabbitMqConnectionFactoryAdded = true; + _configured.RabbitMqConnectionFactory = true; return this; } + #region EmailAccountsOptions + public MessagingServiceInfrastructureConfiguration ConfigureEmailAccountsOptions(Action configureOptions) + { + Services.Configure(configureOptions); + _configured.EmailAccounts = true; + return this; + } + + public MessagingServiceInfrastructureConfiguration ConfigureEmailAccounts(IConfiguration configuration, string sectionName = EmailAccountsOptions.SectionName) + { + Services.Configure(configuration.GetSection(sectionName)); + _configured.EmailAccounts = true; + return this; + } + #endregion EmailAccountsOptions + } diff --git a/src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Options/EmailAccountsOptions.cs similarity index 79% rename from src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs rename to src/infrastructure/DigitalData.MessagingService.Infrastructure/Options/EmailAccountsOptions.cs index 6a86720..b786c30 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Options/EmailAccountsOptions.cs @@ -1,10 +1,7 @@ #if NET -using DigitalData.MessagingService.Application.Common.Dto; using DigitalData.MessagingService.Application.Common.Dto.EmailAccounts; -using DigitalData.MessagingService.Application.EmailAccounts.Commands; -using DigitalData.MessagingService.Domain.Entities; -namespace DigitalData.MessagingService.Application.Common.Options; +namespace DigitalData.MessagingService.Infrastructure.Options; /// /// Wrapper options class that holds a list of entries diff --git a/src/presentation/DigitalData.MessagingService.API/Program.cs b/src/presentation/DigitalData.MessagingService.API/Program.cs index 779442d..4d58332 100644 --- a/src/presentation/DigitalData.MessagingService.API/Program.cs +++ b/src/presentation/DigitalData.MessagingService.API/Program.cs @@ -68,7 +68,9 @@ try builder.Services.AddMessagingServiceApplication(builder.Configuration); // Register Infrastructure layer (RabbitMQ, Repositories, etc.) - builder.Services.AddInfrastructure(cfg => cfg.AddRabbitMqConnectionFactory(builder.Configuration)); + builder.Services.AddInfrastructure(cfg => cfg + .AddRabbitMqConnectionFactory(builder.Configuration) + .ConfigureEmailAccounts(builder.Configuration)); // Health checks — each check corresponds to a singleton registered in the Infrastructure layer builder.Services.AddHealthChecks() diff --git a/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/DependencyInjectionExtensions.cs b/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..bbeb71e --- /dev/null +++ b/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/DependencyInjectionExtensions.cs @@ -0,0 +1,10 @@ +#if NET +namespace DigitalData.MessagingService.Client.DependencyInjection; + +/// +/// +/// +public static class DependencyInjectionExtensions +{ +} +#endif \ No newline at end of file diff --git a/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/MessagingServiceConfiguration.cs b/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/MessagingServiceConfiguration.cs new file mode 100644 index 0000000..cd78a1b --- /dev/null +++ b/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/MessagingServiceConfiguration.cs @@ -0,0 +1,10 @@ +#if NET +namespace DigitalData.MessagingService.Client.DependencyInjection; + +/// +/// +/// +public class MessagingServiceConfiguration +{ +} +#endif \ No newline at end of file diff --git a/src/presentation/DigitalData.MessagingService.Client/DigitalData.MessagingService.Client.csproj b/src/presentation/DigitalData.MessagingService.Client/DigitalData.MessagingService.Client.csproj index 9a03590..03cfacd 100644 --- a/src/presentation/DigitalData.MessagingService.Client/DigitalData.MessagingService.Client.csproj +++ b/src/presentation/DigitalData.MessagingService.Client/DigitalData.MessagingService.Client.csproj @@ -61,7 +61,7 @@ - +