个性化定制ASP.NET 6.0的应用配置

科技资讯 投稿 21800 0 评论

个性化定制ASP.NET 6.0的应用配置

本文的主题是应用程序配置。要介绍的是如何使用配置、如何自定义配置,以采用不同的方式配置。也许您已经有了现有的XML配置,或者希望在不同的应用上共享YAML配置文件,或者从数据库中读取配置值,总之,配置是我们绕不开的话题。

  • 设置配置文件

  • 使用类型化配置

  • 使用初始化(INI)文件进行配置

  • 配置提供程序

本文中的主题仍然是处在的层:

2.1设置配置文件

为了确保的干净和简单,配置被隐藏在的默认配置中,不再是的一部分。

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

public static IHostBuilder CreateHostBuilder(string[] args => 
    Host.CreateDefaultBuilder(args.
    ConfigureWebHostDefaults(webBuilder =>{ 
        webBuilder.UseStartup(; 
    }
}

在中,为了进一步的简化,引入了最小应用程序编程接口(API)方法:去除文件,把所有的配置放在在文件中,让我们看看是什么样子:

Var builder = WebApplication.CreateBuilder(args; 
// Add services to the container. 
builder.Services.AddControllersWithViews(; 
var app = builder.Build(;

上面两个版本都自带默认配置,也支持自定义配置。我们可以使用方法扩展了。

Host.CreateDefaultBuilder(args.ConfigureWebHostDefaults(webBuilder =>
{         
    webBuilder.ConfigureAppConfiguration((builderContext,config =>
    {             
        //这里是配置内容     
    }.UseStartup(;     
};

您还可以使用来配置应用程序配置:

builder.WebHost.ConfigureAppConfiguration((builderContext, config => 
{     
    //这里是配置内容
};

还有一种更简单的方法,通过访问的属性:

builder.Configuration.AddJsonFile("appsettings.json",optional: false,reloadOnChange: true;

当我们创建项目,会生成一些默认的配置文件,比如和,大多数开发人员会使用默认的配置文件来配置。

var env = builder.Environment; 
builder.Configuration.SetBasePath(env.ContentRootPath; 
builder.Configuration.AddJsonFile("appsettings.json",optional: false,reloadOnChange:true; 
builder.Configuration.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true,reloadOnChange:true; 
builder.Configuration.AddEnvironmentVariables(;

该配置通过环境变量设置了应用程序的基本路径,这里使用配置方法是一种最佳实践。另外,配置顺序也很重要,后添加的配置将覆盖之前添加的配置,这里的环境变量始终做最后的覆盖。

2.2 使用类型化配置

在尝试读取文件之前,有必要了解如何使用类型化配置,而不是通过逐键读取配置。要读取类型化配置,需要定义待配置的类型。假设我们创建一个名为的类,如下所示:

namespace ConfigureSample; 
public class AppSettings {     
    public int Foo { get; set; }     
    public string Bar { get; set; }
}

这是一个简单的POCO类,然后,我们可以在的方法内填充这些类。直到ASP。NET Core 5.0:

services.Configure<AppSettings>(Configuration.GetSection("AppSettings";

使用迷你API()方法,配置如下所示:

builder.Services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings";

这样,类型化配置也可以在依赖注入(DI)容器中注册为服务,并且可以在应用程序中的任何地方使用。您可以为每个配置创建不同的配置类型。在大多数情况下,一个配置足以应对,但有时为了需要会将配置划分为不同的配置。

using Microsoft.Extensions.Options; 
// ... 
public class HomeController : Controller {     
    private readonly AppSettings _options;     
    public HomeController(IOptions<AppSettings> options     
    {         
        _options = options.Value;     
    }     
    public IActionResult Index(     
    {         
        ViewData["Message"] = _options.Bar;         
        return View(;     
    }
}

是类型的包装器,属性包含类的实例,包括配置文件中的值。

{
    "Logging": { "LogLevel": { "Default": "Warning" }},
    "AllowedHosts": "*", 
    "AppSettings": {"Foo": 123,"Bar": "Bar"} 
}

2.3 使用INI文件进行配置

要使用文件来配置应用程序,您需要在的方法中添加配置,如下所示:

builder.Configuration.AddIniFile("appsettings.ini",optional: false,reloadOnChange: true; 
builder.Configuration.AddJsonFile($"appsettings.{env.EnvironmentName}.ini", optional: true, reloadOnChange: true;

此代码以与配置文件加载方式相同。第一行是必需的配置,第二行是可选的配置,具体取决于当前运行时环境。

[AppSettings] Bar="FooBar"

此文件包含一个名为和一个名为的属性。

其他所有配置提供程序都将以相同的机制工作。

2.4 配置提供程序

将自定义或第三方配置提供程序添加到中,您需要调用上的方法添加配置源:

// add new configuration source 
builder.Configuration.Add(new MyCustomConfigurationSource { 
    SourceConfig = //配置数据来源     
    Optional = false,  
    ReloadOnChange = true 
};

通常,我们会创建一个扩展方法来更优雅地添加配置源,如下所示:

builder.Configuration.AddMyCustomSource("source", optional: false, reloadOnChange: true;

2.4 回顾

其实在大多数情况下,我们不需要添加其他配置提供程序或创建自己的配置提供程序,但是为了以防万一,但最好知道如何定制它。此外,使用类型化配置是读取和提供设置的好方法。在经典的中,我们往往使用手动的方式读取配置,现在,我们只需提供一个类型即可自动完成此操作,因为该类型将通过DI自动实例化。

编程笔记 » 个性化定制ASP.NET 6.0的应用配置

赞同 (37) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽