So there are really two ways to go about this.
Option 1 : Options Class
You have an appsettings.json file :
{
"myConfiguration": {
"myProperty": true
}
}
You create a Configuration POCO like so :
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
In your startup.cs you have something in your ConfigureServices that registers the configuration :
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
Then in your controller/service you inject in the IOptions and it's useable.
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
Personally I don't like using IOptions because I think it drags along some extra junk that I don't really want, but you can do cool things like hot swapping and stuff with it.
Option 2 : Configuration POCO
It's mostly the same but in your Configure Services method you instead bind to a singleton of your POCO.
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
And then you can just inject the POCO directly :
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
A little simplistic because you should probably use an interface to make unit testing a bit easier but you get the idea.
Mostly taken from here : http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…