I'm assuming you want to access the appsettings.json
file from the web application since class libraries don't have an appsettings.json
by default.
I create a model class that has properties that match the settings in a section in appsettings.json
.
Section in appsettings.json
"ApplicationSettings": {
"SmtpHost": "mydomain.smtp.com",
"EmailRecipients": "me@mydomain.com;other@mydomain.com"
}
Matching model class
namespace MyApp.Models
{
public class AppSettingsModel
{
public string SmtpHost { get; set; }
public string EmailRecipients { get; set; }
}
}
Then populate that model class and add it to the IOptions
collection in the DI container (this is done in the Configure()
method of the Startup class).
services.Configure<AppSettingsModel>(Configuration.GetSection("ApplicationSettings"));
// Other configuration stuff
services.AddOptions();
Then you can access that class from any method that the framework calls by adding it as a parameter in the constructor. The framework handles finding and providing the class to the constructor.
public class MyController: Controller
{
private IOptions<AppSettingsModel> settings;
public MyController(IOptions<AppSettingsModel> settings)
{
this.settings = settings;
}
}
Then when a method in a class library needs the settings, I either pass the settings individually or pass the entire object.