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();

  }

}

时间: 2024-12-28 18:14:24

ASP.NET5配置的相关文章

ASP.NET5中间件

小的应用组件可以包含到Http请求管道当中,ASP.NET5 集成了中间件,被包在了应用程序的Configure方法当中. 1. 什么是中间件 中间件是一组被装到应用程序管道的请求和响应中的组件.每一个组件可以选择地是否把当前的请求传到下一个组件当中,可以执行一些特定的动作在下一个组件之前或者之后执行.请求委托被用来创建这样的请求管道,用来处理你应用程序的请求. 请求的委托用IApplicationBuilder的run, map, use扩展方法来配置. 在Starup的configure里面

ASP.NET5

ASP.NET5 2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio2015(已更新update1).安装了 ASP.NET 5 RC1 一. 创建项目 创建项目很简单..NET Framework 版本选的最新的4.6.1.选择模板 二. 选择模板: 因为只是尝试一下,模板选的最简单的 Empty.看一下创建完的工程目录结构 果然很简单,只有“Startup.cs” 一

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

所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况下,静态文件被存放在项目的wwwroot目录下,而wwwroot的地址被定义在project.json文件中: { "webroot": "wwwroot", ... } 静态文件被存储在wwwroot下的任何目录中,它被客户端以相对路径的方式访问,例如,当你在Visu

让ASP.NET5在Jexus上飞呀飞

就在最近一段时间,“Visual Studio 2015 CTP 5”(以下简称CTP5)发布了,CTP5的发布不仅标志着新一代的VisualStudio正式发布又向前迈出了一步,还标志着距离ASP.NET5(vNext)的正式发布不远.跟随者CTP5,KRE也从Kre beta-1.0升级到了Kre beta-2.0. 与众多.NET开发者一样,我们也一直在密切的关注ASP.NET5的发展,而作为领先的Linux.NET WebServer服务器更是如此,早在Kre beta-2.0发布前后,

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

本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ASP.NET 5 针对WEB编程引入了几个新的基本概念,理解这些概念对快速开发WEB应用来说很重要.或许这些这些概念对你来说不是新的,但是对那些使用ASP.NET 和 Visual Studio 进行传统的WEB应用开发的程序员来说,这些概念可能是新的. 本文主要内容包括: ASP.NET 项目结构 Framework 运行时 pr

《ASP.NET5》Windows 7下Visual Studio 2015安装记录

最近想尝试一下在IBM Bluemix上使用ASP.NET5创建Web应用程序,所以需要在本地搭建ASP.NET5 Web的开发测试环境. 操作系统:Windows 7 x64 VS:Visual Studio Community 2015(含 Update 1) ASP.NET5是什么? ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一个.NET Core的东西. 在

ASP.NET5项目结构及主要代码浅析

1.说明 本章主要对ASP.NET5默认创建的项目结构及主要代码进行简单介绍. 如下图,只是把GiveCase.Web项目中的Models,ViewModels,Services文件夹分离成单独的类库项目. 2.json文件配置 global.json { "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-beta8" }

ASP.NET5和MVC6新特性学习

ASP.NET5和MVC6新特性学习 ? ? ASP.NET5和MVC6的新特性 在新版ASP.NET5和MVC6中,有很多变化,有些是彻底的变化,比如在最底层支持依赖注入技术,为了方便了解,我们这里列出了最重要的10大变化,以便进行学习,具体如下: ASP.NET 5现在已经是跨平台了,可以在Mac和Linux上运行. 不再有Web Forms框架了. 只支持C#,不在支持VB.NET了.(貌似最近又听说最终版VB.NET又要支持了) 新的Tag语法,@Html.LabelFor或Html.T

ASP.NET5实践01:Web项目创建、结构概述、程序运行、发布部署

1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project.json中: "frameworks": { "dnx451": { }, "dnxcore50": { } }, ASP.NET5开发时支持多版本的clr共存,但运行时是使用其中一种. dnxcore50是跨平台.模块化的coreclr.它有多种,如:dnx-coreclr-win-*,dnx-coreclr-li