Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Actually read AppSettings in ConfigureServices phase in ASP.NET Core

I need to setup a few dependencies (services) in the ConfigureServices method in an ASP.NET Core 1.0 web application.

The issue is that based on the new JSON configuration I need to setup a service or another.

I can't seem to actually read the settings in the ConfigureServices phase of the app lifetime:

public void ConfigureServices(IServiceCollection services) {     var section = Configuration.GetSection("MySettings"); // this does not actually hold the settings     services.Configure<MySettingsClass>(section); // this is a setup instruction, I can't actually get a MySettingsClass instance with the settings     // ...     // set up services     services.AddSingleton(typeof(ISomething), typeof(ConcreteSomething)); } 

I would need to actually read that section and decide what to register for ISomething (maybe a different type than ConcreteSomething).

like image 706
Andrei Rînea Avatar asked Nov 07 '16 17:11

Andrei Rînea


People also ask

Is configure or ConfigureServices called first?

At run time, the ConfigureServices method is called before the Configure method. This is so that you can register your custom service with the IoC container which you may use in the Configure method.


1 Answers

That is the way you can get the typed settings from appSettings.json right in ConfigureServices method:

public class Startup {     public Startup(IConfiguration configuration)     {         Configuration = configuration;     }      public IConfiguration Configuration { get; }      public void ConfigureServices(IServiceCollection services)     {         services.Configure<MySettings>(Configuration.GetSection(nameof(MySettings)));         services.AddSingleton(Configuration);          // ...          var settings = Configuration.GetSection(nameof(MySettings)).Get<MySettings>();         int maxNumberOfSomething = settings.MaxNumberOfSomething;          // ...     }      // ... } 
like image 55
Dmitry Pavlov Avatar answered Oct 04 '22 04:10

Dmitry Pavlov