ASP.NET5支持各种各样的配置,应用程序配置数据可以来自JSON, XML或者INI格式的文件,也能来自环境变量,你也可以自定义你自己的Configuration Provider.

1. 获取和设置配置文件

简单地,Configuration类是一个源的集合,它可以提供读或写键值对,你至少配置一个源,如下例所示:

var builder = new ConfigurationBuilder();

builder.Add(new MemoryCOnfigurationSource());

var config = builder.Build();

config.Set("somekey", "somevalue");

string setting = config.Get("somekey");

string setting2 = config["somekey"];

在Json文件中,key/value是通过:来分开的, 如果有多个层次时,键值也可以有:,如 Data:DefaultConnection:ConnectionString.

2. 使用内建的提供者

框架提供内建的多种配置文件源,如JSON, XML, INI. 也可以是环境变量,如下所示:

var builder = new ConfigurationBuilder(".");

builder.AddJsonFile("appsettings.json");

builder.AddEnvironmentVariables();

var config = builder.Build();

如果一个配置键存在多个配置文件当中,以配置顺序最晚的那个为准,上面的例子,以环境变量里变量为准 ,ASP.NET组建议把环境变量做为最后一个配置。

基于环境的配置文件可以如下配置:

public Startup(IHostingEnvironment env)

{

  var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json")

    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

}

在开发环境,配置文件为:appsettings.Development.json

3. 使用Options和Configuration对象

public class MyOptions

{

  public string Option1 {get;set;}

  public int Option2 {get;set;}

}

选项可以通过IOptions<TOptions>注入到你的应用程序当中去,例如:

public class HomeController : Controller

{

  public HomeController(IOptions<MyOptions> optionsAccessor)

}

配置Options如下:

public void ConfigureServices(IServiceCollection services)

{

  services.AddOptions();

  // Configure MyOptions using config

  services.Configure<MyOptions>(Configuration);

  // Confgiure MyOptions using code

  services.Configure<MyOptions>(myOptions => { myOptions.Option1 = "value1_from_action"; });

}

MyOptions.Option1可以配置在appsettings.json文件里面

4. 自定义providers

你可以写一个类继承自ConfigurationSource, 我们用EF来读取数据库的配置。

public class ConfigurationValue

{

  public string Id{get;set;}

  public string Value{get;set;}

}

public class ConfigurationContext : DbContext

{

  public COnfigurationContext(DbConextOptions options) : base(options) {}

  public DbSet<ConfigurationValue> Values{get;set;}

}

public class EntityFrameworkConfigurationSource : ConfigurationSource

{

  public EntityFrameworkConfigurationSource(Action<DbContextOptionsBuilder> optionsAction)

  {

    OptionsAction = optionsAction;

  }

  Action<DbContextOptionsBuilder> OptionsAction {get;set;}

  public override void Load()

  {

    var builder = new DbContextOptionsBuilder<ConfigurationContext>();

    OptionsAction(builder);

    using(var dbContext = new ConfigurationContext(builder.Options))

    {

      dbContext.Database.EnsureCreated();

      Data = !dbContext.Values.Any() ? CreateAndSaveDefaultValues(dbContext)

        : dbContext.Values.ToDictionary( c=> c.Id, c=> c.Value);

    }

  }

  private IDictionary<string, string> CreateAndSaveDefaultValues(ConfigurationContext dbContext)

  {

    var configValues = new Dictionary<string, string>{...};

    dbContext.Values.AddRange(configValues.Select(kvp => new ConfigurationValue(){Id = kvp.Key, value = kvp.Value }).ToArray());

    dbContext.SaveChanges();

    return configValues;

  }

}

public static class EntityFrameworkExtensions

{

  public static IConfigurationBuilder AddEntityFramework(this IConfigurationBuilder builder, Action<DbContextOptionsBuilder> setup)

  {

    return builder.Add(new EntityFrameworkConfigurationSource(setup));

  }

}

public class Program

{

  public void Main(string[] args)

  {

    var builder = new ConfigurationBuilder(".");

    builder.AddJsonFile("appsettings.json");

    var config = builder.Build();

    builder.AddEntityFramework(options => options.UseSqlServer(config["Data:DefaultConnection:ConnectionString"]));

    config = builder.Build();

  }

}

ASP.NET5配置的更多相关文章

  1. 让ASP.NET5在Jexus上飞呀飞

    就在最近一段时间,“Visual Studio 2015 CTP 5”(以下简称CTP5)发布了,CTP5的发布不仅标志着新一代的VisualStudio正式发布又向前迈出了一步,还标志着距离ASP. ...

  2. 从ASP.NET 升级到ASP.NET5(RC1) - 翻译

    前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...

  3. ASP.NET5 Beta8可用性

    ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现在可以使用网络,加密和全球化特 ...

  4. ASP.NET5 中静态文件的各种使用方式

    所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ...

  5. ASP.NET5中间件

    小的应用组件可以包含到Http请求管道当中,ASP.NET5 集成了中间件,被包在了应用程序的Configure方法当中. 1. 什么是中间件 中间件是一组被装到应用程序管道的请求和响应中的组件.每一 ...

  6. ASP.NET5

    ASP.NET5 2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio201 ...

  7. 了解ASP.NET5 Web应用程序结构

    本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ASP.NET 5 针对WEB编程引 ...

  8. Hello ASP.NET5

    2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio2015(已更新upda ...

  9. ASP.NET5 Beta8

    ASP.NET5 Beta8 ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现 ...

随机推荐

  1. JavaScript 资源装备

    书籍 随着JS的普及,大家能获取到的JS书籍实在太多了,但是在我看来只有很少一部分JS书籍可以提供够新够有意思的内容.以下是我看过之后,觉得很值得推荐给大家的: JavaScript高级程序设计 作者 ...

  2. A Knight's Journey

    poj2488:http://poj.org/problem?id=2488 题意:给你一张地图,然后有一个骑士,骑士可以从地图的任意一个方格开始,作为起点,问你该骑士能否走遍整张题图.题解:首先想到 ...

  3. KVM如何以HADOOP作共享存储?

    看到西部数码的作法. 回想IBM的SMARTCLOUD作法,这主要就是应用了HDFS? 外加上HBASE和ZOOKEEPER保驾的? 然后,再想到,这HDFS和OPENSTATCK的SWIFT...纠 ...

  4. AltiumDesigner导入AutoCAD文件DXF,DWG格式

    最近有个朋友给了个AutoCAD的文件,需要我画个板子,结构什么的参见AutoCAD的文件,百度了下,得知protel是可以导入AutoCAD的DXF,DWG格式的文件的,那么AltiumDesign ...

  5. Unity C# 游戏间物体间的访问

    脚本语言:C# 1.在Unity工程中新建两个物体:Cube和Sphere 2.分别为Cube和Sphere添加脚本CubeScript和SphereScript: 在SphereScript这两个定 ...

  6. 【转】Any way to implement BLE notifications in Android-L preview----不错

    原文网址:http://stackoverflow.com/questions/24865120/any-way-to-implement-ble-notifications-in-android-l ...

  7. uri编解码

    相关函数如下:(都是全局函数) encodeURI(URIString):将文本字符串编码为有效的统一资源标示符URI decodeURI(URIString) encodeURIComponent( ...

  8. 《ACM国际大学生程序设计竞赛题解I》——6.10

    Pku 1143: Description Christine and Matt are playing an exciting game they just invented: the Number ...

  9. ssh非交互式密码输入

    ssh登陆不能在命令行中指定密码.sshpass的出现,解决了这一问题.sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码. 它允许你用 -p 参数指定明文密码,然后直接登 ...

  10. BDD框架之lettuce---python3.+安装报错

    跟虫师学习python,学到BDD框架之lettuce( http://www.cnblogs.com/fnng/p/3415609.html),发现python3.5环境下安装lettuce后无法正 ...