I'm coming from regular .NET Web API and I have found the experience around configuration in .NET Core 2 absolutely maddening.
I have read the official documentation and a few tutorials such as this one, but they all see to error.
I have a Database helper class that is supposed to establish a MongoDB connection.
My configuration is rather simple
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "mongodb://localhost:27017"
}
}
- I started with the .NET Core official Angular (ngx) boilerplate template
- I add the configuration as a service singleton in Startup.CS under the
ConfigureServices
section like soservices.AddSingleton(Configuration);
I attempt to inject the configuration into my class like so
public class DatabaseHelper { public static string connstring { get; private set; } public DatabaseHelper(IConfiguration Configuration) { connstring = Configuration["ConnectionStrings:DefaultConnectionString"]; } public static IMongoDatabase QuizDB { get; } = GetDatabase("QuizEngine"); public static IMongoCollection<Quiz> QuizCol { get; } = GetQuizCollection(); public static MongoClient GetConnection() { return new MongoClient(connstring); } public static IMongoDatabase GetDatabase(string database) { MongoClient conn = DatabaseHelper.GetConnection(); return conn.GetDatabase(database); } public static IMongoCollection<Quiz> GetQuizCollection() { return DatabaseHelper.QuizDB.GetCollection<Quiz>("Quizzes"); } }
This compiles and builds fine with no Intellesense errors - But when I step through it in the debugger, the connstring
is null. I have tried playing around with the configuration names etc, but I always seem to come up empty.
I have also tried the POCO way using the example code in the below answer, but I seem to run into static field initializer issues.
Getting value from appsettings.json in .net core
if it helps here is the the startup class part where it sets the public value of Configuration
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }