diff --git a/MobileConfiguration/MobileConfiguration.csproj b/MobileConfiguration/MobileConfiguration.csproj
index 530917f..70f7542 100644
--- a/MobileConfiguration/MobileConfiguration.csproj
+++ b/MobileConfiguration/MobileConfiguration.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/MobileConfiguration/Program.cs b/MobileConfiguration/Program.cs
index d3c76d8..ddf207b 100644
--- a/MobileConfiguration/Program.cs
+++ b/MobileConfiguration/Program.cs
@@ -37,22 +37,15 @@
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSingleton();
-builder.Services.AddSingleton();
-builder.Services.AddSingleton, DbContextFactory>();
-
+builder.Services.AddSingleton(typeof(IDbContextResolver<>), typeof(DbContextResolver<>));
Boolean isInMemoryDatabase = Boolean.Parse(ConfigurationReader.GetValue("AppSettings", "InMemoryDatabase"));
if (isInMemoryDatabase) {
builder.Services.AddDbContext(builder => builder.UseInMemoryDatabase("ConfigurationDatabaseTest"));
- DbContextOptionsBuilder contextBuilder = new DbContextOptionsBuilder();
- contextBuilder = contextBuilder.UseInMemoryDatabase("ConfigurationDatabaseTest");
- builder.Services.AddSingleton>(cont => (connectionString) => new ConfigurationContext(contextBuilder.Options));
}
else {
-
- String connectionString = ConfigurationReader.GetConnectionString("ConfigurationDatabase");
- builder.Services.AddDbContext(builder => builder.UseSqlServer(connectionString));
- builder.Services.AddSingleton>(cont => (connectionString) => { return new ConfigurationContext(connectionString); });
+ builder.Services.AddDbContext(options =>
+ options.UseSqlServer(configuration.GetConnectionString("ConfigurationDatabase")));
}
bool logRequests = ConfigurationReaderExtensions.GetValueOrDefault("MiddlewareLogging", "LogRequests", true);
bool logResponses = ConfigurationReaderExtensions.GetValueOrDefault("MiddlewareLogging", "LogResponses", true);
@@ -92,11 +85,12 @@
// Configure the HTTP request pipeline.
app.UseAuthorization();
-
+app.UseMiddleware();
app.AddRequestLogging();
app.AddResponseLogging();
app.AddExceptionHandler();
+
app.MapControllers();
InitializeDatabase(app).Wait(CancellationToken.None);
@@ -117,23 +111,20 @@ async Task InitializeDatabase(IApplicationBuilder app)
}
}
-public static class ConfigurationReaderExtensions
-{
- public static T GetValueOrDefault(String sectionName, String keyName, T defaultValue)
- {
- try
- {
+public static class ConfigurationReaderExtensions {
+ public static T GetValueOrDefault(String sectionName,
+ String keyName,
+ T defaultValue) {
+ try {
var value = ConfigurationReader.GetValue(sectionName, keyName);
- if (String.IsNullOrEmpty(value))
- {
+ if (String.IsNullOrEmpty(value)) {
return defaultValue;
}
return (T)Convert.ChangeType(value, typeof(T));
}
- catch (KeyNotFoundException kex)
- {
+ catch (KeyNotFoundException kex) {
return defaultValue;
}
}
diff --git a/MobileConfiguration/Repository/IConfigurationRepository.cs b/MobileConfiguration/Repository/IConfigurationRepository.cs
index af281a2..8c1741a 100644
--- a/MobileConfiguration/Repository/IConfigurationRepository.cs
+++ b/MobileConfiguration/Repository/IConfigurationRepository.cs
@@ -4,11 +4,13 @@ namespace MobileConfiguration.Repository
{
using Database;
using Database.Entities;
+ using Microsoft.EntityFrameworkCore;
using Models;
using Newtonsoft.Json;
using Shared.EntityFramework;
using Shared.Exceptions;
- using Microsoft.EntityFrameworkCore;
+ using Shared.General;
+ using Shared.Repositories;
using ApplicationCentreConfiguration = Database.Entities.ApplicationCentreConfiguration;
public interface IConfigurationRepository
@@ -23,24 +25,23 @@ Task UpdateConfiguration(ConfigurationType configurationType,
public class ConfigurationRepository : IConfigurationRepository
{
- private readonly Shared.EntityFramework.IDbContextFactory ContextFactory;
-
- public ConfigurationRepository(Shared.EntityFramework.IDbContextFactory contextFactory) {
- this.ContextFactory = contextFactory;
+ private readonly IDbContextResolver Resolver;
+ private static readonly String ConfigDatabaseName = "ConfigurationDatabase";
+ public ConfigurationRepository(IDbContextResolver resolver) {
+ this.Resolver = resolver;
}
public async Task GetConfiguration(ConfigurationType configurationType,
String id,
CancellationToken cancellationToken) {
- ConfigurationContext context = await this.ContextFactory.GetContext(Guid.NewGuid(), "ConfigurationDatabase",cancellationToken);
-
- Configuration? configuration = await context.Configurations.SingleOrDefaultAsync(c => c.Id == id && c.ConfigType == (Int32)configurationType, cancellationToken:cancellationToken);
+ using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(ConfigDatabaseName);
+ Configuration? configuration = await resolvedContext.Context.Configurations.SingleOrDefaultAsync(c => c.Id == id && c.ConfigType == (Int32)configurationType, cancellationToken:cancellationToken);
if (configuration == null) {
throw new NotFoundException($"No config of type [{configurationType}] found for Id [{id}]");
}
// TODO: create a factory
- MobileConfiguration configurationModel = new MobileConfiguration {
+ MobileConfiguration configurationModel = new() {
ClientId = configuration.ClientId,
ClientSecret = configuration.ClientSecret,
ConfigurationType = (ConfigurationType)configuration.ConfigType,
@@ -67,14 +68,12 @@ public async Task GetConfiguration(ConfigurationType config
public async Task CreateConfiguration(MobileConfiguration mobileConfiguration,
CancellationToken cancellationToken) {
- ConfigurationContext context = await this.ContextFactory.GetContext(Guid.NewGuid(), "ConfigurationDatabase", cancellationToken);
-
Configuration configurationEntity = Factories.Factory.ToEntityConfiguration(mobileConfiguration);
-
- await context.Configurations.AddAsync(configurationEntity,cancellationToken);
+ using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(ConfigDatabaseName);
+ await resolvedContext.Context.Configurations.AddAsync(configurationEntity,cancellationToken);
try {
- await context.SaveChangesAsync(cancellationToken);
+ await resolvedContext.Context.SaveChangesAsync(cancellationToken);
return Result.Success("Configuration created successfully.");
}
catch (Exception ex) {
@@ -86,9 +85,8 @@ public async Task UpdateConfiguration(ConfigurationType configurationType,
String id,
MobileConfiguration mobileConfiguration,
CancellationToken cancellationToken) {
- ConfigurationContext context = await this.ContextFactory.GetContext(Guid.NewGuid(), "ConfigurationDatabase", cancellationToken);
-
- Configuration? configuration = await context.Configurations.SingleOrDefaultAsync(c => c.Id == id && c.ConfigType == (Int32)configurationType, cancellationToken: cancellationToken);
+ using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(ConfigDatabaseName);
+ Configuration? configuration = await resolvedContext.Context.Configurations.SingleOrDefaultAsync(c => c.Id == id && c.ConfigType == (Int32)configurationType, cancellationToken: cancellationToken);
if (configuration == null)
{
@@ -103,7 +101,7 @@ public async Task UpdateConfiguration(ConfigurationType configurationType,
ConfigType = (Int32)mobileConfiguration.ConfigurationType,
Id = mobileConfiguration.Id,
};
- await context.Configurations.AddAsync(configuration, cancellationToken);
+ await resolvedContext.Context.Configurations.AddAsync(configuration, cancellationToken);
}
else {
configuration.ClientSecret = mobileConfiguration.ClientSecret;
@@ -114,7 +112,7 @@ public async Task UpdateConfiguration(ConfigurationType configurationType,
configuration.HostAddresses = JsonConvert.SerializeObject(mobileConfiguration.HostAddresses);
}
- await context.SaveChangesAsync(cancellationToken);
+ await resolvedContext.Context.SaveChangesAsync(cancellationToken);
}
}
}
diff --git a/MobileConfiguration/appsettings.json b/MobileConfiguration/appsettings.json
index 76cabe1..6075e36 100644
--- a/MobileConfiguration/appsettings.json
+++ b/MobileConfiguration/appsettings.json
@@ -4,6 +4,6 @@
"InMemoryDatabase": false
},
"ConnectionStrings": {
- "ConfigurationDatabase": "server=127.0.0.1;user id=sa;password=sp1ttal;database=ConfigurationHost;Encrypt=false"
+ "ConfigurationDatabase": "server=127.0.0.1;user id=sa;password=sp1ttal;database=ConfigurationHost-00000000-0000-0000-0000-000000000001;Encrypt=false"
}
}
diff --git a/MobileConfiguration/nlog.config b/MobileConfiguration/nlog.config
index dd2d11d..ec4bc8d 100644
--- a/MobileConfiguration/nlog.config
+++ b/MobileConfiguration/nlog.config
@@ -5,7 +5,7 @@