ASP.NET5配置
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配置的更多相关文章
- 让ASP.NET5在Jexus上飞呀飞
就在最近一段时间,“Visual Studio 2015 CTP 5”(以下简称CTP5)发布了,CTP5的发布不仅标志着新一代的VisualStudio正式发布又向前迈出了一步,还标志着距离ASP. ...
- 从ASP.NET 升级到ASP.NET5(RC1) - 翻译
前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...
- ASP.NET5 Beta8可用性
ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现在可以使用网络,加密和全球化特 ...
- ASP.NET5 中静态文件的各种使用方式
所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ...
- ASP.NET5中间件
小的应用组件可以包含到Http请求管道当中,ASP.NET5 集成了中间件,被包在了应用程序的Configure方法当中. 1. 什么是中间件 中间件是一组被装到应用程序管道的请求和响应中的组件.每一 ...
- ASP.NET5
ASP.NET5 2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio201 ...
- 了解ASP.NET5 Web应用程序结构
本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ASP.NET 5 针对WEB编程引 ...
- Hello ASP.NET5
2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio2015(已更新upda ...
- ASP.NET5 Beta8
ASP.NET5 Beta8 ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现 ...
随机推荐
- Python字符编码讲解
声明:本文参考 Python字符编码详解 在计算机中我们不管用什么语言和程序,最终数据在计算机中的都是字节码(也就是01形式)的形式存在的,如果 计算机直接把字节码显示在屏幕上,很明显一般人看不懂字节 ...
- c++ 顺序容器学习 - 容器适配器
摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一 ...
- 工作总结:MFC自写排序算法(升序)
最近一个需求里面需要实IP升序排序,用了qsort,结果是内部排序,甚至感觉排序结果不可预测性,于是自己写了一个外部排序. 需求如下:一个指针里面有N条记录,每条记录包含:IP,偏移地址,保留位,均占 ...
- BZOJ 1263 整数划分
Description 从文件中读入一个正整数\(n\).要求将\(n\)写成若干个正整数之和,并且使这些正整数的乘积最大. 例如,\(n=13\),则当\(n\)表示为\(4+3+3+3\)(或\( ...
- Intra Luma Prediction
在宏块的帧内预测过程中,有四种宏块类型:I_4x4,I_8x8,I16x16,I_PCM.他们都需要在相邻块做去块滤波之前进行帧内预测. 亮度帧内预测的总体流程 1-4获取当前block的帧内预测模式 ...
- Qt之模型/视图(自定义按钮)(使用QStyleOption的子类进行drawControl,和我用的方法完全不一样)
http://blog.csdn.net/liang19890820/article/details/50974059
- Lucky and Good Months by Gregorian Calendar(模拟)
http://poj.org/problem?id=3393 好大的一道模拟题,直接当阅读理解看了.下面是大神写的题意,解释的好详细. 定义: Goog month : 该月第一个工作日为星期一的月份 ...
- LightOJ 1422 Halloween Costumes(记忆化搜索)
题意:给你n天分别要穿的衣服,可以套着穿,但是一旦脱下来就不能再穿了,问这n天要准备几件衣服. =============================================== ...
- (转载)mysql中百万级数据插入速度测试
(转载)http://www.111cn.net/database/mysql/42453.htm 100W的数据对于很多朋友来说算小菜了,但今天我就想到创建一个大量数据的测试环境,于是找了一下怎么插 ...
- 《编写高质量代码——Web前端开发修炼之道》读后随笔
结构样式行为的分离 结构标准包括XML标准.XHTML标准.HTML标准:样式标准有CSS标准:行为标准主要包括DOM标准和ECMAScript标准. 通常的项目会按照如上的方式进行分离,但自己曾今做 ...