分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

.net core 2.0 mvc 获取配置信息

发布时间:2023-09-06 01:58责任编辑:苏小强关键词:配置

mvc_core_config

在.net core mvc中 配置文件格式更改为json且移除了ConfigurationManager.AppSettings[xmlkey]的方法,那么,如何来获取配置信息呢?

第一步 将json文件添加到应用程序中

<default code> ???public static void Main(string[] args) ???{ ???????BuildWebHost(args).Run(); ???} ???public static IWebHost BuildWebHost(string[] args) => ???????WebHost.CreateDefaultBuilder(args) ???????????.UseStartup<Startup>() ???????????.Build();如果是使用默认的方法来启动的,则可以跳过此步<reason> ???查看源码 在 CreateDefaultBuilder方法中已使用添加配置文件 ?????//配置信息处理 -- 用于第二步的读取配置信息 ?????.ConfigureAppConfiguration((Action<WebHostBuilderContext, IConfigurationBuilder>) ((hostingContext, config) => ?????{ ????????????//注入运行环境 ???????????IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment; ?????????????//加载配置文件 ???????????config.AddJsonFile("appsettings.json", true, true).AddJsonFile(string.Format("appsettings.{0}.json", (object) hostingEnvironment.EnvironmentName), true, true); ?????????//根据运行环境加载相应文件 ???????????if (hostingEnvironment.IsDevelopment()) ???????????{ ?????????????Assembly assembly = Assembly.Load(new AssemblyName(hostingEnvironment.ApplicationName)); ?????????????if (assembly != (Assembly) null) ???????????????config.AddUserSecrets(assembly, true); ???????????} ???????????config.AddEnvironmentVariables(); ???????????if (args == null) ?????????????return; ???????????config.AddCommandLine(args); ?????}))自定义添加配置文件请参考以上代码

第二步 读取配置信息

<code> ???<Startup> ???//由于在程序启动时已经配置了configuration 则可以直接通过构造方法获取配置信息 ???public Startup(IConfiguration configuration) ???{ ???????Configuration = configuration; ???} ???public IConfiguration Configuration { get; }

第三步 在Controller 获取配置信息

<code> ???<Startup> ???????<method --> ConfigureServices> ???????//添加选项 ???????services.AddOptions(); ???????//将配置信息进行DI注入 ???????services.Configure<AppSetting>(Configuration.GetSection(nameof(AppSetting)));<相关方法说明> ???GetSection: ????????key-value 取值 ????????类似于Dictionary取值的操作 ???Configure: ???????进行DI注入 ???????关键性代码: ???????????//进行DI注入 ?AddSingleton 全局共享一个 ??IOptionsChangeTokenSource<TOptions> ?注入参数对应的type ????????????services.AddSingleton<IOptionsChangeTokenSource<TOptions>> ???????????????((IOptionsChangeTokenSource<TOptions>) ????????????????new ConfigurationChangeTokenSource<TOptions>(name, config) ???????????????); ???????????即实际上还是利用AddSingleton注入实现 ???????<source code> ???????????/// <summary> ???????????/// Registers a configuration instance which TOptions will bind against. 将配置实例作为option绑定到参数上 ???????????/// </summary> ???????????/// <typeparam name="TOptions">The type of options being configured.</typeparam> ???????????/// <param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add the services to.</param> ???????????/// <param name="config">The configuration being bound.</param> ???????????/// <returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> so that additional calls can be chained.</returns> ???????????public static IServiceCollection Configure<TOptions>(this IServiceCollection services, IConfiguration config) where TOptions : class ???????????{ ?????????????return services.Configure<TOptions>(Microsoft.Extensions.Options.Options.DefaultName, config); ???????????} ???????????/// <summary> ???????????/// Registers a configuration instance which TOptions will bind against.同上 ???????????/// </summary> ???????????/// <typeparam name="TOptions">The type of options being configured.</typeparam> ???????????/// <param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add the services to.</param> ???????????/// <param name="name">The name of the options instance.</param> ???????????/// <param name="config">The configuration being bound.</param> ???????????/// <returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> so that additional calls can be chained.</returns> ???????????public static IServiceCollection Configure<TOptions>(this IServiceCollection services, string name, IConfiguration config) where TOptions : class ???????????{ ?????????????if (services == null) ???????????????throw new ArgumentNullException(nameof (services)); ?????????????if (config == null) ???????????????throw new ArgumentNullException(nameof (config)); ???????????????????//进行DI注入 ?AddSingleton 全局共享一个 ??IOptionsChangeTokenSource<TOptions> ?注入参数对应的type ????????????????????services.AddSingleton<IOptionsChangeTokenSource<TOptions>>((IOptionsChangeTokenSource<TOptions>) new ConfigurationChangeTokenSource<TOptions>(name, config)); ?????????????return services.AddSingleton<IConfigureOptions<TOptions>>((IConfigureOptions<TOptions>) new NamedConfigureFromConfigurationOptions<TOptions>(name, config)); ???????????} ???<Controller> ???????public abstract class BaseController : Controller ???????{ ???????????protected ?AppSetting AppSetting { get; set; } ???????????protected BaseController(IOptions<AppSetting> option) => AppSetting = option.Value; ???????} ???intro:由于在mvc经常会使用配置信息,于是我便将获取配置信息的相关处理封装在一个抽象控制器中,故只需要在使用配置信息的控制器中继承此控制器即可然后就可以在控制器中通过AppSetting获取配置信息了

扩展说明

在Startup中直接获取配置文件:public Startup(IApplicationEnvironment appEnv, IHostingEnvironment env) { ??_config = new ConfigurationBuilder() ???????????.AddJsonFile("config.json") ???????????.AddJsonFile("appsettings.json") ???????.AddEnvironmentVariables() ???????.Build();}[https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1&tabs=basicconfiguration](https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1&tabs=basicconfiguration "官方教程")

备注:其中使用的AppSetting 即 我配置信息对应的实体类 【可根据实际情况进行命名】

欢迎各位大佬评论并指出我的错误 :)

author:monster

since:6/4/2018 11:12:45 AM

direction:.net core 2.0 mvc 配置文件的使用

.net core 2.0 mvc 获取配置信息

原文地址:https://www.cnblogs.com/monster17/p/9132680.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved