ASP.NET Core中的Configuration配置二

相关文章

ASP.NET Core2.2 中的Configuration配置一

ASP.NET Core2.2 中的Configuration配置二

1.内存配置

MemoryConfigurationProvider使用内存中集合作为配置键值对。若要激活内存中集合配置,请在ConfigurationBuilder的实例上调用AddInMemoryCollection扩展方法。可以使用IEnumerable<KeyValuePair<String,String>> 初始化配置提供程序。构建主机时调用ConfigureAppConfiguration以指定应用程序的配置:

public class Program
{
    public static readonly Dictionary<string, string> _dict =
        new Dictionary<string, string>
        {
            {"MemoryCollectionKey1", "value1"},
            {"MemoryCollectionKey2", "value2"}
        };
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddInMemoryCollection(_dict);
            })
            .UseStartup<Startup>();
}

而通过启动应用程序时会看到如下配置信息:

1.1GetValue

ConfigurationBinder.GetValue<T>从具有指定键的配置中提取一个值,并可以将其转换为指定类型。如果未找到该键,则获取配置默认值。如上述示例中,配置两个value1、value2值,现在我们在键MemoryCollectionKey1配置中提取对应字符串值,如果找不到配置键MemoryCollectionKey1,则默认使用value3配置值,示例代码如下:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    var config = Configuration.GetValue<string>("MemoryCollectionKey1", "value3");
}

而通过启动应用程序时会看到如下配置信息:

ConfigurationBinder.GetValue找到定义string类型MemoryCollectionKey1键值并输出。如果我们把获取键名称更改为MemoryCollectionKey3,再来看看获取键值输出结果:

我们会看到当ConfigurationBinder.GetValue找不到定义string类型MemoryCollectionKey3键时,则输出默认值。

2.绑定到实体类

可以使用选项模式将文件配置绑定到相关实体类。配置值作为字符串返回,但调用Bind 可以绑定POCO对象。Bind在Microsoft.Extensions.Configuration.Binder包中,后者在 Microsoft.AspNetCore.App元包中。现在我们在CoreWeb/Models目录下新增一个叫starship.json文件,配置内容如下:

{
  "starship": {
    "name": "USS Enterprise",
    "registry": "NCC-1701",
    "class": "Constitution",
    "length": 304.8,
    "commissioned": false
  },
  "trademark": "Paramount Pictures Corp. http://www.paramount.com"
}

然后再新增一个对应配置内容的实体模型(/Models/Starship.cs):

public class Starship
{
    public string Name { get; set; }
    public string Registry { get; set; }
    public string Class { get; set; }
    public decimal Length { get; set; }
    public bool Commissioned { get; set; }
}

构建主机时调用ConfigureAppConfiguration以指定应用程序的配置:

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.SetBasePath(Directory.GetCurrentDirectory());
            config.AddJsonFile(
                "starship.json", optional: true, reloadOnChange: true);
        })
        .UseStartup<Startup>();

示例应用程序调用GetSection方法获取json文件中starship键。通过Bind方法把starship键属性值绑定到Starship类的实例中:

var starship = new Starship();
Configuration.GetSection("starship").Bind(starship);
var _starship = starship;

当应用程序启动时会提供JSON文件配置内容:

3.绑定至对象图

通过第2小节我们学习到如何绑定配置文件内容映射到实例化实体类属性去,同样,配置文件内容也可以绑定到对象图去。现在我们在CoreWeb/Models目录下新增一个叫tvshow.xml文件,配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <tvshow>
    <metadata>
      <series>Dr. Who</series>
      <title>The Sun Makers</title>
      <airdate>11/26/1977</airdate>
      <episodes>4</episodes>
    </metadata>
    <actors>
      <names>Tom Baker, Louise Jameson, John Leeson</names>
    </actors>
    <legal>(c)1977 BBC https://www.bbc.co.uk/programmes/b006q2x0</legal>
  </tvshow>
</configuration>

然后再新增一个对应配置内容的实体模型(/Models/TvShow.cs),其对象图包含Metadata和 Actors类:

public class TvShow
{
    public Metadata Metadata { get; set; }
    public Actors Actors { get; set; }
    public string Legal { get; set; }
}
public class Metadata
{
    public string Series { get; set; }
    public string Title { get; set; }
    public DateTime AirDate { get; set; }
    public int Episodes { get; set; }
}
public class Actors
{
    public string Names { get; set; }
}

构建主机时调用ConfigureAppConfiguration以指定应用程序的配置:
config.AddXmlFile("tvshow.xml", optional: true, reloadOnChange: true);
使用Bind方法将配置内容绑定到整个TvShow对象图。将绑定实例分配给用于呈现的属性:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    var tvShow = new TvShow();
    Configuration.GetSection("tvshow").Bind(tvShow);
    var _tvShow = tvShow;
}

当应用程序启动时会提供XML文件配置内容:

还有一种Bind方法可以将配置内容绑定到整个TvShow对象图:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    var _tvShow = Configuration.GetSection("tvshow").Get<TvShow>();
}

当应用程序启动时会提供XML文件配置内容:

4.将数组绑定至类

Bind方法也支持把配置内容键中的数组绑定到对象类去。公开数字键段(:0:、:1:、… :{n}:)的任何数组格式都能够与POCO类数组进行绑定。使用内存配置提供应用程序在示例中加载这些键和值:

public class Program
{
    public static Dictionary<string, string> arrayDict =
            new Dictionary<string, string>
            {
                {"array:entries:0", "value0"},
                {"array:entries:1", "value1"},
                {"array:entries:2", "value2"},
                {"array:entries:4", "value4"},
                {"array:entries:5", "value5"}
            };
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.SetBasePath(Directory.GetCurrentDirectory());
                config.AddInMemoryCollection(arrayDict);
            })
            .UseStartup<Startup>();
}

因为配置绑定程序无法绑定null值,所以该数组跳过了索引#3的值。在示例应用程序中,POCO类可用于保存绑定的配置数据:

public class ArrayExample
{
    public string[] Entries { get; set; }
}

将配置数据绑定至对象:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    var arrayExample = new ArrayExample();
    Configuration.GetSection("array").Bind(arrayExample);
    var _arrayExample = arrayExample;
}

还可以使用ConfigurationBinder.Get<T>语法,从而产生更精简的代码:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    var _arrayExample = _config.GetSection("array").Get<ArrayExample>();
}

当应用程序启动时会提供内存配置内容:

5.在Razor Pages页或MVC视图中访问配置

若要访问RazorPages页或MVC视图中的配置设置,请为Microsoft.Extensions.Configuration命名空间添加using指令(C#参考:using指令)并将IConfiguration注入页面或视图。
在Razor页面页中:

@page
@model IndexModel
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Index Page</title>
</head>
<body>
    <h1>Access configuration in a Razor Pages page</h1>
    <p>Configuration value for 'key': @Configuration["key"]</p>
</body>
</html>

在MVC视图中:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Index View</title>
</head>
<body>
    <h1>Access configuration in an MVC view</h1>
    <p>Configuration value for 'key': @Configuration["key"]</p>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • .Net Core配置Configuration具体实现

    目录 核心类 构建 ConfigurationBuilder IConfigurationSource ConfigurationProvider ConfigurationRoot 查询 索引器 GetSection DBConfiguration示例 最近又研究了一下.NetCore配置选项的源码实现,又学习到了不少东西.这篇文章先写一下IConfiguration的学习成果,Options的后面补上 核心类 ConfigurationBuilder:IConfigurationBuilde

  • ASP.NET Core Web API 教程Project Configuration

    目录 1. 创建新项目 2. launchSettings.json 文件 3. Program.cs 和 Startup.cs 4. 扩展方法和 CORS 配置 5. IIS 配置 6. Startup 类中的其它代码 7. 基于环境的设置 前言: 本系列文章主要参考了<Ultimate ASP.NET Core 3 Web API>一书,对原文进行了翻译,同时适当删减.修改了一部分内容. 对于某些概念和原理,原书和本文中都没有进行详细描述,如果一一详细介绍,内容就显得臃肿且混乱,我个人是先

  • 详解ASP.NET Core实现强类型Configuration读取配置数据

    前言 实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒. .NET Core读取JSON文件通过读取文件方式 当我将VS2015项目用VS2017打开后再添加控制器,此时会报错如下: 此时我们应该在该项目中的.csproj中添加如下这一句才能解决此问题: <ItemGroup> <DotNetCliToolReference Include="Microso

  • Net Core全局配置读取管理方法ConfigurationManager

    最近在学习.Net Core的过程中,发现.Net Framework中常用的ConfigurationManager在Core中竟然被干掉了. 也能理解.Core中使用的配置文件全是Json,不像Framework使用的XML,暂时不支持也是能理解的,但是毕竟全局配置文件这种东西还挺重要的,阅读了一些文章后目前有3个解决方案. 一.引入扩展System.Configuration.ConfigurationManager 这个扩展库可以直接在Nuget中获取. 使用方法和说明见.NET Cor

  • 如何在ASP.NET Core 的任意类中注入Configuration

    遇到的问题 我已经通读了 MSDN 上关于 Configuration 的相关内容,文档说可实现在 application 的任意位置访问 Configuration . 下面是 Startup.cs 的模板代码. public class Startup {     public Startup(IHostingEnvironment env)     {         var builder = new ConfigurationBuilder()             .SetBase

  • 浅析.netcore中的Configuration具体使用

    目录 添加其他配置文件 源码解读: 读取层级配置项 选项模式获取配置项 命名选项的使用 不管是.net还是.netcore项目,我们都少不了要读取配置文件,在.net中项目,配置一般就存放在web.config中,但是在.netcore中我们新建的项目根本就看不到web.config,取而代之的是appsetting.json. 新建一个webapi项目,可以在startup中看到一个IConfiguration,通过框架自带的IOC使用构造函数进行实例化,在IConfiguration中我们发

  • ASP.NET Core中的Configuration配置一

    相关文章 ASP.NET Core2.2 中的Configuration配置一 ASP.NET Core2.2 中的Configuration配置二 1.前言 ASP.NET Core在应用程序上引入Microsoft.Extensions.Configuration配置,可以支持多种方式配置,包括命令行配置.环境变量配置.文件配置.内存配置,自定义配置等等.下面我们就其中几个配置来聊聊. 2.命令行配置 CommandLineConfigurationProvider在应用程序运行时会从(例如

  • .Net Core3.0 配置Configuration的实现

    准备 .NET core和.NET项目配置上有了很大的改变,支持的也更加丰富了比如命令行,环境变量,内存中.NET对象,设置文件等等..NET项目我们常常把配置信息放到webConfig 或者appConfig中.配置相关的源码https://github.com/aspnet/Extensions:如果打开源码项目如果遇到以下错误,未遇到直接跳过. 错误提示:error : The project file cannot be opened by the project system, bec

  • .NET Core 3.0之创建基于Consul的Configuration扩展组件

    经过前面三篇关于.NET Core Configuration的文章之后,本篇文章主要讨论如何扩展一个Configuration组件出来. 了解了Configuration的源码后,再去扩展一个组件就会比较简单,接下来我们将在.NET Core 3.0-preview5的基础上创建一个基于Consul的配置组件. 相信大家对Consul已经比较了解了,很多项目都会使用Consul作为配置中心,此处也不做其他阐述了,主要是讲一下,创建Consul配置扩展的一些思路.使用Consul配置功能时,我们

  • ASP.NET Core中的Configuration配置二

    相关文章 ASP.NET Core2.2 中的Configuration配置一 ASP.NET Core2.2 中的Configuration配置二 1.内存配置 MemoryConfigurationProvider使用内存中集合作为配置键值对.若要激活内存中集合配置,请在ConfigurationBuilder的实例上调用AddInMemoryCollection扩展方法.可以使用IEnumerable<KeyValuePair<String,String>> 初始化配置提供程

  • ASP.NET Core中的Configuration配置一

    目录 1.前言 2.命令行配置 3.文件配置 3.1 INI配置 3.2 JSON配置 3.2.1GetSection.GetChildren和Exists 3.3 XML配置 相关文章 ASP.NET Core2.2 中的Configuration配置一 ASP.NET Core2.2 中的Configuration配置二 1.前言 ASP.NET Core在应用程序上引入Microsoft.Extensions.Configuration配置,可以支持多种方式配置,包括命令行配置.环境变量配

  • asp.net core中灵活的配置方式详解

    前言 asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法. 一.监听地址及端口配置 1,命令行方式 asp.net core系统通过命令行方式启动,使用的命令如下: dotnet run 上面的命令直接在源代码目录下执行,便可以编译程序并运行.那对于已经发布好的程序,就不能使用上面的指令了,应该使用下面的指令: dotnet 程序集文件名(程序集文件名就是程序发布后生成的dll文件) 上面两个指令都能够启动应用程序.程

  • ASP.NET Core中的环境配置

    1.环境变量配置 ASP.NET Core在应用程序启动时读取环境变量(Properties\launchSettings.json)ASPNETCORE_ENVIRONMENT,并将该值存储在IHostingEnvironment.EnvironmentName中.ASPNETCORE_ENVIRONMENT可设置为任意值,但框架只支持三个值:Development(开发).Staging (分阶段)和 Production(生产).如果未设置ASPNETCORE_ENVIRONMENT,则默

  • ASP.NET Core中修改配置文件后自动加载新配置的方法详解

    前言 在 ASP.NET Core 默认的应用程序模板中, 配置文件的处理如下面的代码所示: config.AddJsonFile( path: "appsettings.json", optional: true, reloadOnChange: true ); config.AddJsonFile( path: $"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: t

  • ASP.NET Core中的配置详解

    ASP.NET Core 提供了一个灵活可扩展,基于键值的配置系统. 但是配置系统独立于ASP.NET Core是Microsoft.Extensions 类库的部分. 它可以用于任何类型的应用程序 1.以键-值对的形式读取配置 appsettings.json 文件: { "Position": { "Title": "编辑器", "Name": "Joe Smith" }, "MyKey&qu

  • ASP.NET Core中MVC模式实现路由二

    目录 1.URL生成 2.URL生成方式 2.1根据操作名称生成URL 2.2根据路由生成URL 2.3在HTML中生成URL 2.4在操作结果中生成URL 3.区域(Area) 4.实现IActionConstraint的路由约束 相关文章 ASP.NET Core中MVC模式实现路由一 ASP.NET Core中MVC模式实现路由二 1.URL生成 MVC应用程序可以使用路由的URL生成功能,生成指向操作(Action)的URL链接. IUrlHelper 接口用于生成URL,是MVC与路由

  • 详解ASP.NET Core中配置监听URLs的五种方式

    默认情况下,ASP. NET Core应用会监听一下2个Url: http://localhost:5000 https://localhost:5001 在本篇博文中,我将展示如何使用五种不同的方式改变应用监听的URLs. 在ASP.NET Core项目启动时,有多种配置监听Url的方式,在我之前的一篇博客中,已经展示了在ASP.NET Core 1.0中如何应用不同的方式配置,在ASP.NET Core 3.x中,大部分方式还是一样的. UseUrls() - 在Program.cs配置程序

  • Asp.Net Core中创建多DbContext并迁移到数据库的步骤

    在我们的项目中我们有时候需要在我们的项目中创建DbContext,而且这些DbContext之间有明显的界限,比如系统中两个DbContext一个是和整个数据库的权限相关的内容而另外一个DbContext则主要是和具体业务相关的内容,这两个部分彼此之间可以分开,那么这个时候我们就可以在我们的项目中创建两个不同的DbContext,然后分别注入进去,当然这两个DbContext可以共用一个ConnectionString,也可以分别使用不同的DbContext,这个需要根据不同的需要来确定,在我们

随机推荐