Skip to content

Commit e2567a4

Browse files
authored
feat: apply options pattern
1 parent 536af58 commit e2567a4

File tree

18 files changed

+70
-33
lines changed

18 files changed

+70
-33
lines changed

Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.Infrastructure/Database/DatabaseModule.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,21 @@ namespace EvolutionaryArchitecture.Fitnet.Contracts.Infrastructure.Database;
44
using Microsoft.EntityFrameworkCore;
55
using Microsoft.Extensions.Configuration;
66
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Options;
78
using Repositories;
89

910
internal static class DatabaseModule
1011
{
11-
private const string ConnectionStringName = "Contracts";
12+
private const string DatabaseConfigurationSection = "Database";
1213

1314
internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration)
1415
{
15-
var connectionString = configuration.GetConnectionString(ConnectionStringName);
16-
services.AddDbContext<ContractsPersistence>(options => options.UseNpgsql(connectionString));
16+
services.Configure<DatabaseOptions>(options => configuration.GetSection(DatabaseConfigurationSection).Bind(options));
17+
services.AddDbContext<ContractsPersistence>((serviceProvider, options) =>
18+
{
19+
var databaseOptions = serviceProvider.GetRequiredService<IOptions<DatabaseOptions>>();
20+
options.UseNpgsql(databaseOptions.Value.ConnectionString);
21+
});
1722
services.AddRepositories();
1823

1924
return services;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace EvolutionaryArchitecture.Fitnet.Contracts.Infrastructure.Database;
2+
3+
internal sealed class DatabaseOptions
4+
{
5+
public string? ConnectionString { get; init; }
6+
}

Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts.IntegrationTests/ContractsDatabaseConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ internal sealed class ContractsDatabaseConfiguration : IDatabaseConfiguration
1010

1111
public Dictionary<string, string?> Get() => new()
1212
{
13-
{ "ConnectionStrings:Contracts", _connectionString }
13+
{ "Database:ConnectionString", _connectionString }
1414
};
1515
}

Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.Development.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
"FeatureManagement": {
99
"Contracts": true,
1010
},
11-
"ConnectionStrings": {
12-
"Contracts": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
11+
"Database": {
12+
"ConnectionString": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
1313
},
1414
"EventBus": {
1515
"Uri": "rabbitmq",

Chapter-3-microservice-extraction/Fitnet.Contracts/Src/Fitnet.Contracts/appsettings.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
"FeatureManagement": {
1010
"Contracts": true,
1111
},
12-
"ConnectionStrings": {
13-
"Contracts": ""
12+
"Database": {
13+
"ConnectionString": ""
1414
},
1515
"ExternalEventBus": {
1616
"Uri": "localhost",

Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.Development.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@
1111
"Passes": true,
1212
"Reports": true
1313
},
14-
"ConnectionStrings": {
15-
"Passes": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword",
16-
"Reports": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword",
17-
"Offers": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
14+
"Database": {
15+
"ConnectionString": "Host=postgres:5432;Database=fitnet;Username=postgres;Password=mysecretpassword"
1816
},
1917
"EventBus": {
2018
"Uri": "rabbitmq",

Chapter-3-microservice-extraction/Fitnet/Src/Fitnet/appsettings.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
"Enabled": true
1818
}
1919
},
20-
"ConnectionStrings": {
21-
"Passes": "",
22-
"Reports": "",
23-
"Offers": ""
20+
"Database": {
21+
"ConnectionString": ""
2422
},
2523
"EventBus": {
2624
"Uri": "localhost",

Chapter-3-microservice-extraction/Fitnet/Src/Offers/Fitnet.Offers.DataAccess/Database/DatabaseModule.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@ namespace EvolutionaryArchitecture.Fitnet.Offers.DataAccess.Database;
44
using Microsoft.EntityFrameworkCore;
55
using Microsoft.Extensions.Configuration;
66
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Options;
78

89
internal static class DatabaseModule
910
{
10-
private const string ConnectionStringName = "Offers";
11+
private const string DatabaseConfigurationSection = "Database";
1112

1213
internal static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration)
1314
{
14-
var connectionString = configuration.GetConnectionString(ConnectionStringName);
15-
services.AddDbContext<OffersPersistence>(options => options.UseNpgsql(connectionString));
15+
services.Configure<DatabaseOptions>(_ => configuration.GetSection(DatabaseConfigurationSection));
16+
services.AddDbContext<OffersPersistence>((serviceProvider, options) =>
17+
{
18+
var databaseOptions = serviceProvider.GetRequiredService<IOptions<DatabaseOptions>>();
19+
options.UseNpgsql(databaseOptions.Value.ConnectionString);
20+
});
1621

1722
return services;
1823
}
@@ -23,4 +28,4 @@ internal static IApplicationBuilder UseDatabase(this IApplicationBuilder applica
2328

2429
return applicationBuilder;
2530
}
26-
}
31+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace EvolutionaryArchitecture.Fitnet.Offers.DataAccess.Database;
2+
3+
internal sealed class DatabaseOptions
4+
{
5+
public string? ConnectionString { get; init; }
6+
}

Chapter-3-microservice-extraction/Fitnet/Src/Offers/Tests/Fitnet.Offers.IntegrationTests/OffersDatabaseConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ internal sealed class OffersDatabaseConfiguration : IDatabaseConfiguration
1010

1111
public Dictionary<string, string?> Get() => new()
1212
{
13-
{ "ConnectionStrings:Offers", _connectionString }
13+
{ "Database:ConnectionString", _connectionString }
1414
};
1515
}

0 commit comments

Comments
 (0)