diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj b/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj
index 68d69e8c..97e62fae 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj
@@ -5,16 +5,16 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj b/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj
index 50290313..5b76a24f 100644
--- a/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj
+++ b/Chapter-2-modules-separation/Src/Common/Fitnet.Common.Infrastructure/Fitnet.Common.Infrastructure.csproj
@@ -8,7 +8,6 @@
-
diff --git a/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj b/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj
index a7bca2e8..3cac8ac0 100644
--- a/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj
+++ b/Chapter-2-modules-separation/Src/Contracts/Fitnet.Contracts.Infrastructure/Fitnet.Contracts.Infrastructure.csproj
@@ -10,7 +10,6 @@
-
diff --git a/Chapter-2-modules-separation/Src/Directory.Packages.props b/Chapter-2-modules-separation/Src/Directory.Packages.props
index 07da22c9..6f76a4a9 100644
--- a/Chapter-2-modules-separation/Src/Directory.Packages.props
+++ b/Chapter-2-modules-separation/Src/Directory.Packages.props
@@ -3,14 +3,14 @@
true
-
-
+
+
@@ -18,24 +18,23 @@
-
+
-
+
+
+
+
+
-
-
-
-
-
diff --git a/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj b/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj
index 2aac0088..4f356b36 100644
--- a/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj
+++ b/Chapter-2-modules-separation/Src/Offers/Fitnet.Offers.DataAccess/Fitnet.Offers.DataAccess.csproj
@@ -7,6 +7,5 @@
-
\ No newline at end of file
diff --git a/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj b/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj
index 1e9f63c1..5f2c3f8a 100644
--- a/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj
+++ b/Chapter-2-modules-separation/Src/Passes/Fitnet.Passes.DataAccess/Fitnet.Passes.DataAccess.csproj
@@ -7,6 +7,5 @@
-
\ No newline at end of file
diff --git a/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj b/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj
index 3e18a25c..9e0fe877 100644
--- a/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj
+++ b/Chapter-2-modules-separation/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/Fitnet.Reports.IntegrationTests.csproj
@@ -7,7 +7,6 @@
-
diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs
index ed3c788a..76104b7a 100644
--- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs
+++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs
@@ -4,16 +4,21 @@ namespace EvolutionaryArchitecture.Fitnet.Contracts.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
using Repositories;
internal static class DatabaseModule
{
- private const string ConnectionStringName = "Contracts";
+ private const string DatabaseConfigurationSection = "Database";
internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration)
{
- var connectionString = configuration.GetConnectionString(ConnectionStringName);
- services.AddDbContext(options => options.UseNpgsql(connectionString));
+ services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options));
+ services.AddDbContext((serviceProvider, options) =>
+ {
+ var databaseOptions = serviceProvider.GetRequiredService>();
+ options.UseNpgsql(databaseOptions.Value.ConnectionString);
+ });
services.AddRepositories();
return services;
diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs
new file mode 100644
index 00000000..ac02e05f
--- /dev/null
+++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseOptions.cs
@@ -0,0 +1,6 @@
+namespace EvolutionaryArchitecture.Fitnet.Contracts.Infrastructure.Database;
+
+internal sealed class DatabaseOptions
+{
+ public string? ConnectionString { get; init; }
+}
\ No newline at end of file
diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs
index 818e9a19..4da91e44 100644
--- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs
+++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs
@@ -10,6 +10,6 @@ internal sealed class ContractsDatabaseConfiguration : IDatabaseConfiguration
public Dictionary Get() => new()
{
- { "ConnectionStrings:Contracts", _connectionString }
+ { "Database:ConnectionString", _connectionString }
};
}
diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json
index 534a0365..dcc35bd9 100644
--- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json
+++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json
@@ -8,8 +8,8 @@
"FeatureManagement": {
"Contracts": true,
},
- "ConnectionStrings": {
- "Contracts": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
+ "Database": {
+ "ConnectionString": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
},
"EventBus": {
"Uri": "rabbitmq",
diff --git a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json
index 37b231db..45c1e4c2 100644
--- a/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json
+++ b/Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json
@@ -9,8 +9,8 @@
"FeatureManagement": {
"Contracts": true,
},
- "ConnectionStrings": {
- "Contracts": ""
+ "Database": {
+ "ConnectionString": ""
},
"ExternalEventBus": {
"Uri": "localhost",
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json
index bdcefcd1..30ed3b57 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json
@@ -11,10 +11,8 @@
"Passes": true,
"Reports": true
},
- "ConnectionStrings": {
- "Passes": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword",
- "Reports": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword",
- "Offers": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
+ "Database": {
+ "ConnectionString": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
},
"EventBus": {
"Uri": "rabbitmq",
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json
index 89456cd1..4b1beae0 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json
@@ -17,10 +17,8 @@
"Enabled": true
}
},
- "ConnectionStrings": {
- "Passes": "",
- "Reports": "",
- "Offers": ""
+ "Database": {
+ "ConnectionString": ""
},
"EventBus": {
"Uri": "localhost",
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs
index f7165a94..32ff1f2b 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs
@@ -4,15 +4,20 @@ namespace EvolutionaryArchitecture.Fitnet.Offers.DataAccess.Database;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
internal static class DatabaseModule
{
- private const string ConnectionStringName = "Offers";
+ private const string DatabaseConfigurationSection = "Database";
internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration)
{
- var connectionString = configuration.GetConnectionString(ConnectionStringName);
- services.AddDbContext(options => options.UseNpgsql(connectionString));
+ services.Configure(_ => configuration.GetSection(DatabaseConfigurationSection));
+ services.AddDbContext((serviceProvider, options) =>
+ {
+ var databaseOptions = serviceProvider.GetRequiredService>();
+ options.UseNpgsql(databaseOptions.Value.ConnectionString);
+ });
return services;
}
@@ -23,4 +28,4 @@ internal static IApplicationBuilder UseDatabase(this IApplicationBuilder applica
return applicationBuilder;
}
-}
\ No newline at end of file
+}
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs
new file mode 100644
index 00000000..6c4ff042
--- /dev/null
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseOptions.cs
@@ -0,0 +1,6 @@
+namespace EvolutionaryArchitecture.Fitnet.Offers.DataAccess.Database;
+
+internal sealed class DatabaseOptions
+{
+ public string? ConnectionString { get; init; }
+}
\ No newline at end of file
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs
index d366eced..3525f5d1 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs
@@ -10,6 +10,6 @@ internal sealed class OffersDatabaseConfiguration : IDatabaseConfiguration
public Dictionary Get() => new()
{
- { "ConnectionStrings:Offers", _connectionString }
+ { "Database:ConnectionString", _connectionString }
};
}
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs
index fcf9f43e..6b209efa 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseModule.cs
@@ -4,15 +4,20 @@ namespace EvolutionaryArchitecture.Fitnet.Passes.DataAccess.Database;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
internal static class DatabaseModule
{
- private const string ConnectionStringName = "Passes";
+ private const string DatabaseConfigurationSection = "Database";
internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration)
{
- var connectionString = configuration.GetConnectionString(ConnectionStringName);
- services.AddDbContext(options => options.UseNpgsql(connectionString));
+ services.Configure(_ => configuration.GetSection(DatabaseConfigurationSection));
+ services.AddDbContext((serviceProvider, options) =>
+ {
+ var databaseOptions = serviceProvider.GetRequiredService>();
+ options.UseNpgsql(databaseOptions.Value.ConnectionString);
+ });
return services;
}
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs
new file mode 100644
index 00000000..fe8f892c
--- /dev/null
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Fitnet.Passes.DataAccess/Database/DatabaseOptions.cs
@@ -0,0 +1,6 @@
+namespace EvolutionaryArchitecture.Fitnet.Passes.DataAccess.Database;
+
+internal sealed class DatabaseOptions
+{
+ public string? ConnectionString { get; init; }
+}
\ No newline at end of file
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs
index 17742270..6f637948 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Passes/Tests/Fitnet.Passes.IntegrationTests/PassesDatabaseConfiguration.cs
@@ -10,6 +10,6 @@ internal sealed class PassesDatabaseConfiguration : IDatabaseConfiguration
public Dictionary Get() => new()
{
- { "ConnectionStrings:Passes", _connectionString }
+ { "Database:ConnectionString", _connectionString }
};
}
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs
index 4778dc9d..e48e1074 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseAccessModule.cs
@@ -1,11 +1,15 @@
namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
internal static class DatabaseAccessModule
{
- internal static IServiceCollection AddDataAccess(this IServiceCollection services)
+ private const string DatabaseConfigurationSection = "Database";
+
+ internal static IServiceCollection AddDataAccess(this IServiceCollection services, IConfiguration configuration)
{
+ services.Configure(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options));
services.AddSingleton();
return services;
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs
index 3e786ab5..6215cd0a 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseConnectionFactory.cs
@@ -1,10 +1,10 @@
namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess;
-using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Options;
using System.Data;
using Npgsql;
-internal sealed class DatabaseConnectionFactory(IConfiguration configuration) : IDatabaseConnectionFactory
+internal sealed class DatabaseConnectionFactory(IOptions databaseOptions) : IDatabaseConnectionFactory
{
private NpgsqlConnection? _connection;
@@ -15,8 +15,7 @@ public IDbConnection Create()
return _connection;
}
- _connection =
- new NpgsqlConnection(configuration.GetConnectionString("Reports"));
+ _connection = new NpgsqlConnection(databaseOptions.Value.ConnectionString);
_connection.Open();
return _connection;
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs
new file mode 100644
index 00000000..5219b1a8
--- /dev/null
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/DataAccess/DatabaseOptions.cs
@@ -0,0 +1,6 @@
+namespace EvolutionaryArchitecture.Fitnet.Reports.DataAccess;
+
+internal sealed class DatabaseOptions
+{
+ public string? ConnectionString { get; init; }
+}
\ No newline at end of file
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs
index f4379226..df24c753 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Fitnet.Reports/ReportsModule.cs
@@ -27,7 +27,7 @@ public static IServiceCollection AddReports(this IServiceCollection services, IC
return services;
}
- services.AddDataAccess();
+ services.AddDataAccess(configuration);
services.AddNewPassesRegistrationsPerMonthReport();
return services;
diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs
index a5d34f87..2b9aaa3d 100644
--- a/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs
+++ b/Chapter-3-microservice-extraction/Fitnet/Src/Reports/Tests/Fitnet.Reports.IntegrationTests/ReportsDatabaseConfiguration.cs
@@ -10,7 +10,6 @@ internal sealed class ReportsDatabaseConfiguration : IDatabaseConfiguration
public Dictionary Get() => new()
{
- { "ConnectionStrings:Passes", _connectionString },
- { "ConnectionStrings:Reports", _connectionString }
+ { "Database:ConnectionString", _connectionString }
};
}