在.NET项目中添加配置是一个常见的需求。配置可以帮助管理应用程序的设置,如数据库连接字符串、API密钥等。本文将从最简单的Web API项目开始,然后探讨如何在控制台应用程序或测试项目中添加配置。
在Visual Studio中创建一个新的Web API项目时,会生成一些默认文件。与配置相关的文件有:
在配置文件中添加自定义的ApiSettings
节。appsettings.json
文件应该类似于这样:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ApiSettings": {
"ApiName": "My Awesome API"
}
}
自定义的配置节叫做ApiSettings
,包含一个字符串字段ApiName
。让定义一个具有相同结构的类:
public class ApiSettings
{
public string ApiName { get; set; }
}
如果使用的是低于.NET6的版本,这一步将在Startup.cs
的ConfigureServices
方法中完成。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// 注册ApiSettings配置节
builder.Services.Configure<ApiSettings>(builder.Configuration.GetSection("ApiSettings"));
现在已经完成了所有繁重的工作,可以通过将配置注入到控制器或服务中来使用它。为了演示,将把它注入到自动生成的WeatherForecastController
中。
public WeatherForecastController(ILogger<WeatherForecastController> logger, IOptions<ApiSettings> options)
{
_logger = logger;
_apiSettings = options.Value;
}
在构造函数中设置断点,观察options
已经被填充了来自JSON配置的值,这要归功于依赖注入和在上一步中所做的最小配置设置。不要忘记定义配置参数IOptions<T>
而不是仅仅T
,这是新手常见的错误。记住,.NET Core(现在只是.NET)中的配置是基于IOptions
的。
将使用以下核心包来开始:
可以自己决定使用哪个版本,但这些是开始的基础包。
建议将Web API项目的appsettings.json
作为链接添加到控制台或测试文件中,以节省重新配置的麻烦。哦,还需要添加对包含ApiSettings
类的项目的引用——很可能是Web API项目,如果一直按照这个指南操作的话。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using SampleNet6Api;
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var services = new ServiceCollection()
.AddOptions()
.Configure<ApiSettings>(config.GetSection("ApiSettings"))
.BuildServiceProvider();
var apiSettings = services.GetService<IOptions<ApiSettings>>();
Console.WriteLine(apiSettings.Value.ApiName);
Console.ReadLine();
以上是在控制台项目的Program.cs
中的内容,但对于测试项目来说也会非常相似。
首先,创建一个ConfigurationBuilder
并用JSON文件中的配置填充它。然后,创建一个ServiceCollection
(.NETDI容器),向其中添加IOptions
并注册ApiSettings
类。这两步(不包括Configure
部分)在Web项目中会自动在幕后进行。