Swiftorial Logo
Home
Swift Lessons
Tutorials
Learn More
Career
Resources

Configuration

Introduction

ASP.NET Core provides a robust configuration system that can handle various configuration sources such as JSON files, environment variables, command-line arguments, and more. This tutorial will guide you through the process of setting up and using configuration in an ASP.NET Core application.

Setting Up the Development Environment

Before you start, ensure you have the following installed:

  • Visual Studio 2019 or later
  • .NET Core SDK

Example: Installing .NET Core SDK

https://dotnet.microsoft.com/download/dotnet-core

Creating a New ASP.NET Core Project

Open Visual Studio and create a new project:

  • Select "Create a new project".
  • Choose "ASP.NET Core Web Application" and click "Next".
  • Name your project and select the location to save it. Click "Create".
  • In the "Create a new ASP.NET Core Web Application" dialog, select "Web Application (Model-View-Controller)" and click "Create".

Understanding Configuration in ASP.NET Core

Configuration in ASP.NET Core is handled by the IConfiguration interface, which allows access to configuration values from various sources. The configuration system is initialized in the Startup class.

Adding Configuration Sources

You can add multiple configuration sources in the Program.cs file. The most common sources include JSON files, environment variables, and command-line arguments.

Example: Adding Configuration Sources

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
                config.AddEnvironmentVariables();
                if (args != null)
                {
                    config.AddCommandLine(args);
                }
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup();
            });
}

Accessing Configuration Values

Once you have configured the configuration sources, you can access the configuration values in your application. The IConfiguration interface is injected into the Startup class and other services where needed.

Example: Accessing Configuration Values

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Access configuration values
        var mySettingValue = _configuration["MySettingKey"];
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Binding Configuration to Objects

Configuration values can be bound to objects, making it easier to manage and access configuration settings. Here’s how you can bind configuration values to a custom object:

Example: Binding Configuration to Objects

public class MySettings
{
    public string Setting1 { get; set; }
    public string Setting2 { get; set; }
}

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Bind configuration values to MySettings object
        var mySettings = new MySettings();
        _configuration.GetSection("MySettings").Bind(mySettings);
        services.AddSingleton(mySettings);
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Middleware configuration
    }
}

Using Options Pattern

The options pattern is a preferred way to bind configuration settings to objects and inject them into services. This pattern uses the IOptions interface. Here’s how to use the options pattern:

Example: Using Options Pattern

public class MySettings
{
    public string Setting1 { get; set; }
    public string Setting2 { get; set; }
}

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<MySettings>(Configuration.GetSection("MySettings"));
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Middleware configuration
    }
}

public class HomeController : Controller
{
    private readonly IOptions<MySettings> _settings;

    public HomeController(IOptions<MySettings> settings)
    {
        _settings = settings;
    }

    public IActionResult Index()
    {
        var setting1 = _settings.Value.Setting1;
        var setting2 = _settings.Value.Setting2;
        // Use settings
        return View();
    }
}

Using Environment Variables

Environment variables can be used to override configuration values without changing the configuration files. This is useful for managing sensitive information and different configurations for various environments.

Example: Using Environment Variables

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddEnvironmentVariables();
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Conclusion

Congratulations! You have learned the basics of configuration in ASP.NET Core. This tutorial covered setting up a new project, adding configuration sources, accessing configuration values, binding configuration to objects, using the options pattern, and using environment variables. From here, you can further explore more advanced topics like managing hierarchical configuration settings, reloading configuration values at runtime, and integrating third-party configuration providers.