Changes on config and DI
This commit is contained in:
@@ -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<StorageConfiguration>(configuration, StorageConfiguration.SectionName)
|
||||
.AddValidatedConfiguration<PlayListConfiguration>(configuration, PlayListConfiguration.SectionName);
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
|
||||
static IServiceCollection AddValidatedConfiguration<TConfiguration>(
|
||||
this IServiceCollection serviceDescriptors,
|
||||
IConfiguration configuration,
|
||||
string sectionName)
|
||||
where TConfiguration : class
|
||||
{
|
||||
serviceDescriptors
|
||||
.AddOptionsWithValidateOnStart<TConfiguration>()
|
||||
.Bind(configuration.GetRequiredSection(sectionName))
|
||||
.ValidateDataAnnotations();
|
||||
|
||||
serviceDescriptors.AddSingleton(serviceProvider =>
|
||||
serviceProvider.GetRequiredService<IOptions<TConfiguration>>().Value);
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<DatabaseConfiguration>(configuration, DatabaseConfiguration.SectionName)
|
||||
.AddValidatedConfiguration<KeycloakConfiguration>(configuration, KeycloakConfiguration.SectionName);
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
|
||||
static IServiceCollection AddValidatedConfiguration<TConfiguration>(
|
||||
this IServiceCollection serviceDescriptors,
|
||||
IConfiguration configuration,
|
||||
string sectionName)
|
||||
where TConfiguration : class
|
||||
{
|
||||
serviceDescriptors
|
||||
.AddOptionsWithValidateOnStart<TConfiguration>()
|
||||
.Bind(configuration.GetRequiredSection(sectionName))
|
||||
.ValidateDataAnnotations();
|
||||
|
||||
serviceDescriptors.AddSingleton(serviceProvider =>
|
||||
serviceProvider.GetRequiredService<IOptions<TConfiguration>>().Value);
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<KeycloakConfiguration>()
|
||||
.Bind(configuration)
|
||||
serviceDescriptors.AddOptionsWithValidateOnStart<KeycloakConfiguration>()
|
||||
.Bind(configuration.GetRequiredSection(KeycloakConfiguration.SectionName))
|
||||
.ValidateDataAnnotations();
|
||||
|
||||
serviceDescriptors.AddScoped(serviceProvider =>
|
||||
@@ -24,6 +24,7 @@ namespace Musify.Infrastructure.Identity
|
||||
keycloakConfiguration.Password);
|
||||
} );
|
||||
serviceDescriptors.AddScoped<IKeycloakUserClient, KeycloakIdentityService>();
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<IEventBus, MassTransitEventBus>();
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddInfrastructureWorkerModules(this IServiceCollection serviceDescriptors, IConfiguration configuration)
|
||||
{
|
||||
serviceDescriptors
|
||||
.AddInfrastructureConfigurations(configuration)
|
||||
.AddDatabase(configuration)
|
||||
.AddStorageHandler()
|
||||
.AddPictureHandler()
|
||||
.AddMassTransitConsumers(configuration)
|
||||
.AddScoped<IEventBus, MassTransitEventBus>();
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<Database>();
|
||||
serviceDescriptors.AddScoped<IDatabase>(serviceProvider => serviceProvider.GetRequiredService<Database>());
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,11 @@ namespace Musify.Infrastructure.Persistence
|
||||
.AddJsonFile("DesignSettings.json")
|
||||
.AddUserSecrets<DatabaseDesignTimeFactory>()
|
||||
.Build();
|
||||
var databaseConfiguration = DatabaseConfiguration.Load(configuration);
|
||||
|
||||
var databaseConfiguration = configuration
|
||||
.GetRequiredSection(DatabaseConfiguration.SectionName)
|
||||
.Get<DatabaseConfiguration>()
|
||||
?? throw new InvalidOperationException($"{DatabaseConfiguration.SectionName} configuration section not found.");
|
||||
|
||||
var optionsBuilder = new DbContextOptionsBuilder<Database>();
|
||||
optionsBuilder.UseNpgsql(databaseConfiguration.ConnectionString);
|
||||
|
||||
@@ -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<IPictureHandler, PictureHandler>();
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<IAmazonS3>(serviceProvider =>
|
||||
{
|
||||
@@ -22,6 +22,8 @@ namespace Musify.Infrastructure.Storage
|
||||
} );
|
||||
|
||||
serviceDescriptors.AddScoped<IStorageHandler, StorageHandler>();
|
||||
|
||||
return serviceDescriptors;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user