From 582bd9c005ac08e8482b8bd2f5827adc6e81662e Mon Sep 17 00:00:00 2001 From: XShine555 Date: Wed, 18 Mar 2026 17:17:37 +0100 Subject: [PATCH] Dependency injection --- Application/ApplicationDependencyInjection.cs | 6 ---- .../ConfigurationDependencyInjection.cs | 22 +++++++++++++ .../Configuration/PlayListConfiguration.cs | 30 ++++++++--------- .../Configuration/StorageConfiguration.cs | 12 +++---- .../DispatchR/DispatchRDependencyInjection.cs | 13 ++++++++ .../Pictures/PictureDependencyInjection.cs | 13 ++++++++ Infrastructure/Infrastructure.csproj | 2 ++ .../MassTransitDependencyInjection.cs | 33 +++++++++++++++++++ .../DatabaseDependencyInjection.cs | 23 +++++++++++++ .../Pictures/PictureDependencyInjection.cs | 13 ++++++++ .../Storage/StorageDependencyInjection.cs | 13 ++++++++ 11 files changed, 153 insertions(+), 27 deletions(-) delete mode 100644 Application/ApplicationDependencyInjection.cs create mode 100644 Application/Configuration/ConfigurationDependencyInjection.cs create mode 100644 Application/DispatchR/DispatchRDependencyInjection.cs create mode 100644 Application/Pictures/PictureDependencyInjection.cs create mode 100644 Infrastructure/Messaging/MassTransitDependencyInjection.cs create mode 100644 Infrastructure/Persistence/DatabaseDependencyInjection.cs create mode 100644 Infrastructure/Pictures/PictureDependencyInjection.cs create mode 100644 Infrastructure/Storage/StorageDependencyInjection.cs diff --git a/Application/ApplicationDependencyInjection.cs b/Application/ApplicationDependencyInjection.cs deleted file mode 100644 index 620f081..0000000 --- a/Application/ApplicationDependencyInjection.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Musify.Application -{ - public static class ApplicationDependencyInjection - { - } -} \ No newline at end of file diff --git a/Application/Configuration/ConfigurationDependencyInjection.cs b/Application/Configuration/ConfigurationDependencyInjection.cs new file mode 100644 index 0000000..46d3702 --- /dev/null +++ b/Application/Configuration/ConfigurationDependencyInjection.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Musify.Application.Configuration +{ + public static class ConfigurationDependencyInjection + { + public static void AddPlayListConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + var playListConfiguration = PlayListConfiguration.Load(configuration); + + serviceDescriptors.AddSingleton(playListConfiguration); + } + + public static void AddStorageConfiguration(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + var storageConfiguration = StorageConfiguration.Load(configuration); + + serviceDescriptors.AddSingleton(storageConfiguration); + } + } +} \ No newline at end of file diff --git a/Application/Configuration/PlayListConfiguration.cs b/Application/Configuration/PlayListConfiguration.cs index e0360c0..fd6260b 100644 --- a/Application/Configuration/PlayListConfiguration.cs +++ b/Application/Configuration/PlayListConfiguration.cs @@ -20,38 +20,38 @@ namespace Musify.Application.Configuration public int LargePictureHeight { get; private set; } = 512; - public PlayListConfiguration Load(IConfiguration configuration) + public static PlayListConfiguration Load(IConfiguration configuration) { var section = configuration.GetSection(SectionName).Get() ?? throw new InvalidOperationException($"{SectionName} configuration section not found."); - Validate(); + Validate(section); return section; } - void Validate() + static void Validate(PlayListConfiguration configuration) { - EnsureValue(Routes.ParentFolder, $"{SectionName}:BucketName"); - EnsureValue(Routes.SmallPictures, $"{SectionName}:Routes:SmallPictures"); - EnsureValue(Routes.MediumPictures, $"{SectionName}:Routes:MediumPictures"); - EnsureValue(Routes.LargePictures, $"{SectionName}:Routes:LargePictures"); + EnsureValue(configuration.Routes.ParentFolder, $"{SectionName}:BucketName"); + EnsureValue(configuration.Routes.SmallPictures, $"{SectionName}:Routes:SmallPictures"); + EnsureValue(configuration.Routes.MediumPictures, $"{SectionName}:Routes:MediumPictures"); + EnsureValue(configuration.Routes.LargePictures, $"{SectionName}:Routes:LargePictures"); - EnsurePositiveValue(SmallPictureWidth, $"{SectionName}:SmallPictureWidth"); - EnsurePositiveValue(SmallPictureHeight, $"{SectionName}:SmallPictureHeight"); - EnsurePositiveValue(MediumPictureWidth, $"{SectionName}:MediumPictureWidth"); - EnsurePositiveValue(MediumPictureHeight, $"{SectionName}:MediumPictureHeight"); - EnsurePositiveValue(LargePictureWidth, $"{SectionName}:LargePictureWidth"); - EnsurePositiveValue(LargePictureHeight, $"{SectionName}:LargePictureHeight"); + EnsurePositiveValue(configuration.SmallPictureWidth, $"{SectionName}:SmallPictureWidth"); + EnsurePositiveValue(configuration.SmallPictureHeight, $"{SectionName}:SmallPictureHeight"); + EnsurePositiveValue(configuration.MediumPictureWidth, $"{SectionName}:MediumPictureWidth"); + EnsurePositiveValue(configuration.MediumPictureHeight, $"{SectionName}:MediumPictureHeight"); + EnsurePositiveValue(configuration.LargePictureWidth, $"{SectionName}:LargePictureWidth"); + EnsurePositiveValue(configuration.LargePictureHeight, $"{SectionName}:LargePictureHeight"); } - void EnsureValue(string value, string name) + static void EnsureValue(string value, string name) { if (string.IsNullOrEmpty(value)) throw new InvalidOperationException($"{name} configuration value not found."); } - void EnsurePositiveValue(int value, string name) + static void EnsurePositiveValue(int value, string name) { if (value < 1) throw new InvalidOperationException($"{name} configuration value must be a positive integer."); diff --git a/Application/Configuration/StorageConfiguration.cs b/Application/Configuration/StorageConfiguration.cs index e18b5de..2604ee6 100644 --- a/Application/Configuration/StorageConfiguration.cs +++ b/Application/Configuration/StorageConfiguration.cs @@ -10,23 +10,23 @@ namespace Musify.Application.Configuration public StorageRoutes Routes { get; set; } = new StorageRoutes(); - public StorageConfiguration Load(IConfiguration configuration) + public static StorageConfiguration Load(IConfiguration configuration) { var section = configuration.GetSection(SectionName).Get() ?? throw new InvalidOperationException($"{SectionName} configuration section not found."); - Validate(); + Validate(section); return section; } - void Validate() + static void Validate(StorageConfiguration configuration) { - EnsureValue(BucketName, nameof(BucketName)); - EnsureValue(Routes.Uploads, $"{SectionName}:Route:Upload"); + EnsureValue(configuration.BucketName, nameof(BucketName)); + EnsureValue(configuration.Routes.Uploads, $"{SectionName}:Route:Upload"); } - void EnsureValue(string value, string name) + static void EnsureValue(string value, string name) { if (string.IsNullOrEmpty(value)) throw new InvalidOperationException($"{name} configuration value not found."); diff --git a/Application/DispatchR/DispatchRDependencyInjection.cs b/Application/DispatchR/DispatchRDependencyInjection.cs new file mode 100644 index 0000000..2b058d8 --- /dev/null +++ b/Application/DispatchR/DispatchRDependencyInjection.cs @@ -0,0 +1,13 @@ +using DispatchR.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Musify.Application.DispatchR +{ + public static class DispatchRDependencyInjection + { + public static void AddDispatchR(this IServiceCollection serviceDescriptors) + { + serviceDescriptors.AddDispatchR(typeof(DispatchRDependencyInjection).Assembly); + } + } +} \ No newline at end of file diff --git a/Application/Pictures/PictureDependencyInjection.cs b/Application/Pictures/PictureDependencyInjection.cs new file mode 100644 index 0000000..914897f --- /dev/null +++ b/Application/Pictures/PictureDependencyInjection.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Contracts.Application; + +namespace Musify.Application.Pictures +{ + public static class PictureDependencyInjection + { + public static void AddPictureService(this IServiceCollection serviceDescriptors) + { + serviceDescriptors.AddScoped(); + } + } +} \ No newline at end of file diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index 4a82fe5..4b67f77 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -11,7 +11,9 @@ + + diff --git a/Infrastructure/Messaging/MassTransitDependencyInjection.cs b/Infrastructure/Messaging/MassTransitDependencyInjection.cs new file mode 100644 index 0000000..30c31af --- /dev/null +++ b/Infrastructure/Messaging/MassTransitDependencyInjection.cs @@ -0,0 +1,33 @@ +using MassTransit; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Musify.Infrastructure.Messaging.Consumers; + +namespace Musify.Infrastructure.Messaging +{ + public static class MassTransitDependencyInjection + { + public static void AddMassTransitHandler(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + serviceDescriptors.AddMassTransit(options => + { + options.AddConsumer(); + + options.UsingRabbitMq((busRegistrationContext, busFactoryConfigurator) => + { + var section = configuration.GetSection("MassTransit"); + + var host = section["Host"] + ?? throw new InvalidOperationException("MassTransit:Host configuration is missing."); + + busFactoryConfigurator.Host(host); + + busFactoryConfigurator.ReceiveEndpoint(PictureResizerConsumer.QueueName, endpointConfigurator => + { + endpointConfigurator.ConfigureConsumer(busRegistrationContext); + } ); + } ); + } ); + } + } +} \ No newline at end of file diff --git a/Infrastructure/Persistence/DatabaseDependencyInjection.cs b/Infrastructure/Persistence/DatabaseDependencyInjection.cs new file mode 100644 index 0000000..f924e98 --- /dev/null +++ b/Infrastructure/Persistence/DatabaseDependencyInjection.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Contracts.Infrastructure; + +namespace Musify.Infrastructure.Persistence +{ + public static class DatabaseDependencyInjection + { + public static void AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + var connectionString = configuration.GetConnectionString("Default") + ?? throw new InvalidOperationException("Default Connection connection string not found."); + + serviceDescriptors.AddDbContext(options => + { + options.UseNpgsql(connectionString); + } ); + + serviceDescriptors.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); + } + } +} \ No newline at end of file diff --git a/Infrastructure/Pictures/PictureDependencyInjection.cs b/Infrastructure/Pictures/PictureDependencyInjection.cs new file mode 100644 index 0000000..2abd860 --- /dev/null +++ b/Infrastructure/Pictures/PictureDependencyInjection.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Contracts.Infrastructure; + +namespace Musify.Infrastructure.Pictures +{ + public static class PictureDependencyInjection + { + public static void AddPictureHandler(this IServiceCollection serviceDescriptors) + { + serviceDescriptors.AddScoped(); + } + } +} \ No newline at end of file diff --git a/Infrastructure/Storage/StorageDependencyInjection.cs b/Infrastructure/Storage/StorageDependencyInjection.cs new file mode 100644 index 0000000..54c58a2 --- /dev/null +++ b/Infrastructure/Storage/StorageDependencyInjection.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Contracts.Infrastructure; + +namespace Musify.Infrastructure.Storage +{ + public static class StorageDependencyInjection + { + public static void AddStorageHandler(this IServiceCollection serviceDescriptors) + { + serviceDescriptors.AddScoped(); + } + } +} \ No newline at end of file