如何在.NET MAUI中配置appSettings.json并注入IConfiguration
在.NET MAUI中实现类似ASP.NET Core的appSettings.json配置方案
1. 准备appSettings.json文件
在项目根目录添加appSettings.json文件,右键文件设置属性:
- 生成操作:设为「嵌入的资源」
- 复制到输出目录:设为「如果较新则复制」
示例配置内容:
{ "MySettings": { "ApiBaseUrl": "https://api.example.com", "TimeoutSeconds": 30, "EnableLogging": true }, "AppTitle": "MAUI配置示例" }
2. 封装配置加载扩展方法
创建静态扩展类,把配置加载逻辑封装成可复用的方法:
using Microsoft.Extensions.Configuration; using System.Reflection; namespace YourAppNamespace; public static class MauiConfigurationExtensions { public static MauiAppBuilder ConfigureAppConfiguration(this MauiAppBuilder builder, Type assemblyType, string configFileName) { var assembly = assemblyType.Assembly; // 读取嵌入的配置文件流 using var stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{configFileName}"); if (stream != null) { var config = new ConfigurationBuilder() .AddJsonStream(stream) .Build(); builder.Configuration.AddConfiguration(config); } return builder; } }
3. 在MauiProgram.cs中调用扩展方法
修改原有CreateMauiApp方法,加入配置加载逻辑:
namespace YourAppNamespace; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() // 调用封装的配置加载方法 .ConfigureAppConfiguration(typeof(MauiProgram), "appsettings.json") .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); builder.Logging.AddDebug(); // 可选:绑定强类型配置,方便后续注入使用 builder.Services.Configure<MySettings>(builder.Configuration.GetSection("MySettings")); return builder.Build(); } } // 强类型配置类示例 public class MySettings { public string ApiBaseUrl { get; set; } = string.Empty; public int TimeoutSeconds { get; set; } public bool EnableLogging { get; set; } }
4. 在应用中使用配置
方式1:直接注入IConfiguration读取
在ViewModel或页面中注入IConfiguration直接读取配置项:
using Microsoft.Extensions.Configuration; namespace YourAppNamespace.ViewModels; public class MainViewModel { private readonly IConfiguration _configuration; public MainViewModel(IConfiguration configuration) { _configuration = configuration; var appTitle = _configuration["AppTitle"]; var apiUrl = _configuration.GetSection("MySettings:ApiBaseUrl").Value; } }
方式2:使用强类型配置(推荐)
通过IOptions<MySettings>注入强类型配置,避免硬编码配置键:
using Microsoft.Extensions.Options; namespace YourAppNamespace.ViewModels; public class MainViewModel { private readonly MySettings _settings; public MainViewModel(IOptions<MySettings> settings) { _settings = settings.Value; var apiUrl = _settings.ApiBaseUrl; var timeout = _settings.TimeoutSeconds; } }
内容的提问来源于stack exchange,提问作者Syed Bilal Ali
相关产品推荐
相关产品推荐

