public class Bar
{
public static readonly string Foo = ConfigurationManager.AppSettings["Foo"];
}
In the .NET Framework 4.x, I can use the ConfigurationManager.AppSettings ["Foo"]
to get Foo
in Webconfig
,and then I can easily get the value of Foo
through Bar.Foo
But in .Net core, I mustto inject options
, And can not get the value of Foo
through Bar.Foo
Is there a method, which can be directly through the Bar.Foo
to get the value of Foo
?
So there are really two ways to go about this.
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.
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/