From 23852709cb3a89e6e14be1c584996feebe2a4a98 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Thu, 19 Mar 2026 17:22:27 +0100 Subject: [PATCH] Changes on config and DI --- .../ConfigurationDependencyInjection.cs | 35 ++++++++++++++++ .../ConfigurationDependencyInjection.cs | 35 ++++++++++++++++ .../Identity/KeycloakDependencyInjection.cs | 7 ++-- .../InfrastructureDependencyInjection.cs | 42 +++++++++++++++++++ .../MassTransitDependencyInjection.cs | 7 +++- .../DatabaseDependencyInjection.cs | 4 +- .../Persistence/DatabaseDesignTimeFactory.cs | 6 ++- .../Pictures/PictureDependencyInjection.cs | 3 +- .../Storage/StorageDependencyInjection.cs | 4 +- 9 files changed, 134 insertions(+), 9 deletions(-) create mode 100644 Application/Configuration/ConfigurationDependencyInjection.cs create mode 100644 Infrastructure/Configuration/ConfigurationDependencyInjection.cs create mode 100644 Infrastructure/InfrastructureDependencyInjection.cs diff --git a/Application/Configuration/ConfigurationDependencyInjection.cs b/Application/Configuration/ConfigurationDependencyInjection.cs new file mode 100644 index 0000000..903d489 --- /dev/null +++ b/Application/Configuration/ConfigurationDependencyInjection.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace Musify.Application.Configuration +{ + public static class ConfigurationDependencyInjection + { + public static IServiceCollection AddApplicationConfigurations(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + serviceDescriptors + .AddValidatedConfiguration(configuration, StorageConfiguration.SectionName) + .AddValidatedConfiguration(configuration, PlayListConfiguration.SectionName); + + return serviceDescriptors; + } + + static IServiceCollection AddValidatedConfiguration( + this IServiceCollection serviceDescriptors, + IConfiguration configuration, + string sectionName) + where TConfiguration : class + { + serviceDescriptors + .AddOptionsWithValidateOnStart() + .Bind(configuration.GetRequiredSection(sectionName)) + .ValidateDataAnnotations(); + + serviceDescriptors.AddSingleton(serviceProvider => + serviceProvider.GetRequiredService>().Value); + + return serviceDescriptors; + } + } +} diff --git a/Infrastructure/Configuration/ConfigurationDependencyInjection.cs b/Infrastructure/Configuration/ConfigurationDependencyInjection.cs new file mode 100644 index 0000000..edd3a70 --- /dev/null +++ b/Infrastructure/Configuration/ConfigurationDependencyInjection.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace Musify.Infrastructure.Configuration +{ + public static class ConfigurationDependencyInjection + { + public static IServiceCollection AddInfrastructureConfigurations(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + serviceDescriptors + .AddValidatedConfiguration(configuration, DatabaseConfiguration.SectionName) + .AddValidatedConfiguration(configuration, KeycloakConfiguration.SectionName); + + return serviceDescriptors; + } + + static IServiceCollection AddValidatedConfiguration( + this IServiceCollection serviceDescriptors, + IConfiguration configuration, + string sectionName) + where TConfiguration : class + { + serviceDescriptors + .AddOptionsWithValidateOnStart() + .Bind(configuration.GetRequiredSection(sectionName)) + .ValidateDataAnnotations(); + + serviceDescriptors.AddSingleton(serviceProvider => + serviceProvider.GetRequiredService>().Value); + + return serviceDescriptors; + } + } +} diff --git a/Infrastructure/Identity/KeycloakDependencyInjection.cs b/Infrastructure/Identity/KeycloakDependencyInjection.cs index af34c25..6e5accb 100644 --- a/Infrastructure/Identity/KeycloakDependencyInjection.cs +++ b/Infrastructure/Identity/KeycloakDependencyInjection.cs @@ -8,10 +8,10 @@ namespace Musify.Infrastructure.Identity { public static class KeycloakDependencyInjection { - public static void AddKeycloakAuthentication(this IServiceCollection serviceDescriptors, IConfiguration configuration) + public static IServiceCollection AddKeycloakAuthentication(this IServiceCollection serviceDescriptors, IConfiguration configuration) { - var keycloakConfiguration = serviceDescriptors.AddOptionsWithValidateOnStart() - .Bind(configuration) + serviceDescriptors.AddOptionsWithValidateOnStart() + .Bind(configuration.GetRequiredSection(KeycloakConfiguration.SectionName)) .ValidateDataAnnotations(); serviceDescriptors.AddScoped(serviceProvider => @@ -24,6 +24,7 @@ namespace Musify.Infrastructure.Identity keycloakConfiguration.Password); } ); serviceDescriptors.AddScoped(); + return serviceDescriptors; } } } \ No newline at end of file diff --git a/Infrastructure/InfrastructureDependencyInjection.cs b/Infrastructure/InfrastructureDependencyInjection.cs new file mode 100644 index 0000000..3d52f0f --- /dev/null +++ b/Infrastructure/InfrastructureDependencyInjection.cs @@ -0,0 +1,42 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Contracts.Infrastructure; +using Musify.Infrastructure.Configuration; +using Musify.Infrastructure.Identity; +using Musify.Infrastructure.Messaging; +using Musify.Infrastructure.Persistence; +using Musify.Infrastructure.Pictures; +using Musify.Infrastructure.Storage; + +namespace Musify.Infrastructure +{ + public static class InfrastructureDependencyInjection + { + public static IServiceCollection AddInfrastructureModules(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + serviceDescriptors + .AddInfrastructureConfigurations(configuration) + .AddDatabase(configuration) + .AddKeycloakAuthentication(configuration) + .AddStorageHandler() + .AddPictureHandler() + .AddMassTransitClient(configuration) + .AddScoped(); + + return serviceDescriptors; + } + + public static IServiceCollection AddInfrastructureWorkerModules(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + serviceDescriptors + .AddInfrastructureConfigurations(configuration) + .AddDatabase(configuration) + .AddStorageHandler() + .AddPictureHandler() + .AddMassTransitConsumers(configuration) + .AddScoped(); + + return serviceDescriptors; + } + } +} diff --git a/Infrastructure/Messaging/MassTransitDependencyInjection.cs b/Infrastructure/Messaging/MassTransitDependencyInjection.cs index 3d7cf60..def4d94 100644 --- a/Infrastructure/Messaging/MassTransitDependencyInjection.cs +++ b/Infrastructure/Messaging/MassTransitDependencyInjection.cs @@ -7,7 +7,7 @@ namespace Musify.Infrastructure.Messaging { public static class MassTransitDependencyInjection { - public static void AddMassTransitClient(this IServiceCollection serviceDescriptors, IConfiguration configuration) + public static IServiceCollection AddMassTransitClient(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors.AddMassTransit(options => { @@ -31,9 +31,10 @@ namespace Musify.Infrastructure.Messaging } ); } ); } ); + return serviceDescriptors; } - public static void AddMassTransitConsumers(this IServiceCollection serviceDescriptors, IConfiguration configuration) + public static IServiceCollection AddMassTransitConsumers(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors.AddMassTransit(options => { @@ -69,6 +70,8 @@ namespace Musify.Infrastructure.Messaging } ); } ); } ); + + return serviceDescriptors; } } } \ No newline at end of file diff --git a/Infrastructure/Persistence/DatabaseDependencyInjection.cs b/Infrastructure/Persistence/DatabaseDependencyInjection.cs index 349e91c..4152976 100644 --- a/Infrastructure/Persistence/DatabaseDependencyInjection.cs +++ b/Infrastructure/Persistence/DatabaseDependencyInjection.cs @@ -6,10 +6,12 @@ namespace Musify.Infrastructure.Persistence { public static class DatabaseDependencyInjection { - public static void AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration) + public static IServiceCollection AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors.AddDbContext(); serviceDescriptors.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); + + return serviceDescriptors; } } } \ No newline at end of file diff --git a/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs b/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs index 5568178..18f38a9 100644 --- a/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs +++ b/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs @@ -14,7 +14,11 @@ namespace Musify.Infrastructure.Persistence .AddJsonFile("DesignSettings.json") .AddUserSecrets() .Build(); - var databaseConfiguration = DatabaseConfiguration.Load(configuration); + + var databaseConfiguration = configuration + .GetRequiredSection(DatabaseConfiguration.SectionName) + .Get() + ?? throw new InvalidOperationException($"{DatabaseConfiguration.SectionName} configuration section not found."); var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseNpgsql(databaseConfiguration.ConnectionString); diff --git a/Infrastructure/Pictures/PictureDependencyInjection.cs b/Infrastructure/Pictures/PictureDependencyInjection.cs index 2abd860..4d955c7 100644 --- a/Infrastructure/Pictures/PictureDependencyInjection.cs +++ b/Infrastructure/Pictures/PictureDependencyInjection.cs @@ -5,9 +5,10 @@ namespace Musify.Infrastructure.Pictures { public static class PictureDependencyInjection { - public static void AddPictureHandler(this IServiceCollection serviceDescriptors) + public static IServiceCollection AddPictureHandler(this IServiceCollection serviceDescriptors) { serviceDescriptors.AddScoped(); + return serviceDescriptors; } } } \ No newline at end of file diff --git a/Infrastructure/Storage/StorageDependencyInjection.cs b/Infrastructure/Storage/StorageDependencyInjection.cs index 6c54325..061f13c 100644 --- a/Infrastructure/Storage/StorageDependencyInjection.cs +++ b/Infrastructure/Storage/StorageDependencyInjection.cs @@ -7,7 +7,7 @@ namespace Musify.Infrastructure.Storage { public static class StorageDependencyInjection { - public static void AddStorageHandler(this IServiceCollection serviceDescriptors) + public static IServiceCollection AddStorageHandler(this IServiceCollection serviceDescriptors) { serviceDescriptors.AddScoped(serviceProvider => { @@ -22,6 +22,8 @@ namespace Musify.Infrastructure.Storage } ); serviceDescriptors.AddScoped(); + + return serviceDescriptors; } } } \ No newline at end of file