ASP.NET 5 (vNext) - Getting a Configuration Setting ASP.NET 5 (vNext) - Getting a Configuration Setting asp.net asp.net

ASP.NET 5 (vNext) - Getting a Configuration Setting


ASP.NET 5 makes heavy use of Dependency Injection, so if you are also using Dependency Injection then this is very simple. If you examine the sample MVC6 project, you can see how this works:

First, there's a class AppSettings defined in Properties, which is a strongly-typed version of the options your class supports. In the sample project, this just contains SiteTitle.

public class AppSettings{    public string SiteTitle { get; set; }}

Then, this class is initialised through dependency injection in ConfigureServices. Configuration here is the one you created in the constructor of the Startup class.

public void ConfigureServices(IServiceCollection services){    services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));    // ...}

Then, assuming your class is instantiated by the dependency injection container, you can simply ask for an IOptions and you'll get one. For example, in a controller you could have the following:

public class HomeController{    private string _title;    public HomeController(IOptions<AppSettings> settings)     {        _title = settings.Options.SiteTitle;    }}


I use ASP.NET 5 dependency injection, like so.

config.json:

{    "random":  "Hello World!"}

startup.cs:

public class Startup{    public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)    {        var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)            .AddJsonFile("config.json");        Configuration = builder.Build();    }    public IConfiguration Configuration { get; set; }    public void ConfigureServices(IServiceCollection services)    {        services.AddMvc();        services.AddSingleton<IConfiguration>(sp => { return Configuration; });    }    public void Configure(IApplicationBuilder app)    {        app.UseMvc(routes =>        {            routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");        });    }}

Controller:

public class HomeController : Controller{    IConfiguration config;    public HomeController(IConfiguration config)    {        this.config = config;    }    public IActionResult Index()    {        var template = "<marquee>{0}</marquee>";        var content = string.Format(template, config.Get("random"));        return Content(content, "text/html");    }}


I highly recommend using the OptionsModel instead of reading the configuration directly. It allows strong typed model binding to configuration.

Here is an example: GitHub.com/aspnet/Options/test/Microsoft.Extensions.Options.Test/OptionsTest.cs

For your particular case create a model:

class AppSettings {    public string SomeSetting {get;set;}}

and then bind it to your configuration:

var config = // The configuration objectvar options = ConfigurationBinder.Bind<AppSettings>(config); Console.WriteLine(options.SomeSetting);

That way you don't have to worry from where the setting comes from, how it is stored or what is the structure. You simply predefine your options model and magic happens.