Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm writing a basic app to learn ASP.NET 5. One area I find very confusing is configuration. Prior to ASP.NET 5, I could do the following:

var settingValue = ConfigurationManager.AppSettings["SomeKey"]; 

I would have lines of code like that sprinkled throughout my code. Now, in the vNext world, I have a config.json file that looks like this:

config.json

{   "AppSettings": {     "SomeKey":"SomeValue"   } } 

Then in Startup.cs, I have the following: Startup.cs

public IConfiguration Configuration { get; set; } public Startup(IHostingEnvironment environment)  {   Configuration = new Configuration()       .AddJsonFile("config.json"); } 

From there, I'm totally stumped. I have MyClass.cs in /src/Website/Code/Models/MyClass.cs.

MyClass.cs

public class MyClass {   public string DoSomething()    {     var result = string.Empty;     var keyValue = string.Empty; // TODO: What do I do here? How do I get the value of "AppSettings:SomeKey"?     return result;   } } 

How do I get the value of "AppSettings:SomeKey"?

like image 943
xam developer Avatar asked May 15 '15 15:05

xam developer


People also ask

Where is ASP.NET configuration?

The root of the ASP.NET configuration hierarchy is the systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\Web. config file, which includes settings that apply to all ASP.NET applications that run a specific version of the . NET Framework.


2 Answers

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;     } } 
like image 138
Richard Avatar answered Sep 24 '22 03:09

Richard


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");     } } 
like image 24
Andy Taw Avatar answered Sep 23 '22 03:09

Andy Taw