ASP.NET Core中的配置(附实例)

377 阅读5分钟

简介

ASP.NET Core支持许多配置方法。在ASP.NET Core应用程序中,配置被存储在名-值对中,它可以在运行时从应用程序的各个部分读取。名-值对可以被分组为一个多层次的层次结构。应用程序的配置数据可以来自

  • 文件,如JSON、XML、INI
  • 环境变量
  • 命令行参数
  • 内存中的集合
  • 自定义提供者

ASP.NET Core中的配置系统是由ASP.NET的旧版本重组的。旧版本使用 "System.Configuration "命名空间,能够读取XML配置文件,如web.config。新的配置模型可以访问基于键/值的设置,它可以检索各种来源,如JSON、XML和INI。

使用JSON提供者读取配置的例子

一般来说,配置仍然是简单的键/值结构,或者在使用外部文件时可能是分层结构。考虑以下appsetting.json文件作为这个例子。

appSetting.json

1.  {
2.  "status": "This Status read from appSettings.json file",
3.  "ConnectionStrings": {
4.  "DefaultConnection": "Server=.\\\\sqlexpress;Database=Test;Trusted\_Connection=True; MultipleActiveResultSets=true "
5.  }
6.  }

为了读取JSON配置文件,我们需要添加 "Microsoft.Extensions.Configuration "和 "Microsoft.Extensions.Configuration.Json "库作为依赖项。需要在package.json文件的依赖部分添加以下两行:

1.  "Microsoft.Extensions.Configuration":"1.0.0"2.  "Microsoft.Extensions.Configuration.Json":"1.0.0 "

JsonConfigurationExtensions "类的 "AddJsonFile "方法用于将JSON文件加入构建器。我们可以通过使用键名获得一个简单的配置值。如果配置值在一个层次结构中,它可以使用": "分隔的键来检索,从层次结构的根部开始。在这个例子中,如果我们想获得 "DefaultConnection "的值,那么键就变成 "ConnectionStrings:DefaultConnection"。

Starpup.cs

1.  using Microsoft.AspNetCore.Builder;
2.  using Microsoft.AspNetCore.Http;
3.  using Microsoft.Extensions.Configuration;
4.  using Microsoft.Extensions.DependencyInjection;

6.  命名空间 WebApplication
7.  {
8.  public class Startup {
9.  public IConfiguration Configuration { get; set; }
10.  公共 Startup() {
11.  var builder =new ConfigurationBuilder()
12.  .AddJsonFile("appSettings.json")。
13.  配置 = builder.Build()。
14.  }
15.  public void ConfigureServices(IServiceCollection services)
16.  {
17.  services.AddMvc()。
18.  }
19.  public void Configure(IApplicationBuilder app){
20.  app.UseMvc();
21.  app.Run(context => {
22.  var status = Configuration\["status"\];
23.  var connectionString = Configuration\["ConnectionStrings:DefaultConnection"\];
24.  context.Response.WriteAsync("Default Connection: " + connectionString)。
25.  context.Response.WriteAsync("<br/>")。
26.  return context.Response.WriteAsync("Status: "+status);
27.  });
28.  }
29.  }
30.  }

输出

index

在控制器中检索配置数据

在上面提到的例子中,我是在启动类本身中检索配置值。新版本的ASP.NET内置了对依赖性注入的支持。使用DI,我们可以将配置的值注入到控制器中。

使用ServiceCollectionServiceExtensions类的AddSingleton方法,我们可以用一个服务实例添加一个指定类型的单子服务。

Startup.cs

1.  public void ConfigureServices(IServiceCollection services)
2.  {
3.  services.AddMvc()。
4.  services.AddSingleton<IConfiguration>(Configuration)。
5.  }

**HomeController.cs**

1.  using Microsoft.AspNetCore.Mvc;
2.  using Microsoft.Extensions.Configuration;

4.  public class HomeController : Controller
5.  {
6.  IConfiguration \_configuration;
7.  公共 HomeController(IConfiguration configuration)
8.  {
9.  \_configuration = 配置。
10.  }
11.  \[Route("home/index")\]
12.  公共 IActionResult Index( )
13.  {
14.  ViewBag.connectionstring = \_configuration\["ConnectionStrings:DefaultConnection"\]。
15.  返回 View()。
16.  }
17.  }

输出

Retrieve Configuration Data at controller

使用选项模式获取配置对象

选项模式使我们可以使用自定义的选项类来表示一组相关的设置。选项类必须有一个为每个设置定义的公共读写属性,并且该类不能接受任何参数。

Microsoft.Extensions.Options.ConfigurationExtensions "依赖项包含了IServiceCollection.Configure的扩展方法。我们需要在project.json文件中添加这个依赖项。

1.  "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0 "

在这里,我已经定义了我的模型,我使用了与前一个例子中使用的appSetting.json。在这个例子中,我将appSetting.json的连接字符串设置与我的模型类绑定。

1.  public class ConnectionString
2.  {
3.  公共 ConnectionString( )
4.  {
5.  }
6.  public string DefaultConnection { get; set; }
7.  public string MainDBConnectionString { get; set; }
8.  }

在以下代码中,IConfigureOptions服务被添加到服务容器中。它将ConnectionStrings类绑定到appsettings.json文件的 "ConnectionStrings "部分。

Startup.cs

1.  public void ConfigureServices(IServiceCollection services)
2.  {

4.  services.AddOptions()。

7.  services.Configure<ConnectionString>(Configuration.GetSection("ConnectionStrings"))。

9.  services.AddSingleton<IConfiguration>(Configuration);
10.  services.AddMvc()。
11.  }

使用IOptions访问器服务,我们可以将Options注入到我们的应用程序。为了设置IOptions服务,我们需要在Startup类的ConfigureServices方法中调用 "AddOptions "扩展方法。

HomeController.cs

1.  using Microsoft.AspNetCore.Mvc;
2.  using Microsoft.Extensions.Options;

4.  public class HomeController : Controller
5.  {
6.  连接字符串\_connectionstring。
7.  public HomeController(IOptions<ConnectionString> connectionstringAccessor)
8.  {
9.  \_connectionstring = connectionstringAccessor.Value;
10.  }
11.  \[Route("home/index")\]
12.  公共 IActionResult Index( )
13.  {
14.  ViewBag.connectionstring = \_connectionstring.DefaultConnection;
15.  返回 View()。
16.  }
17.  }

输出

Get Configuration object using options pattern

与内存中的提供者一起工作

ASP.NET Core的新配置框架也支持内存配置。在这种类型的配置中,值被直接存储到代码中,应用程序的后期部分使用这种配置。以下是一个示例,展示了如何使用内存中的提供者并绑定到一个类。

1.  public Startup( )
2.  {
3.  var builder =new ConfigurationBuilder()。

5.  var dic =新的 字典<string, string>。
6.  {
7.  {"Profile:FirstName", "Jignesh"},
8.  {"个人资料:姓氏", "Trivedi"},
9.  {"个人资料:职务", "PL"} .
10.  };
11.  builder.AddInMemoryCollection(dic);
12.  配置 = builder.Build();
13.  }

使用Configuration["Profile:FirstName"],我们可以得到profile配置的firstname的值。我们还可以将这个值与自定义模型绑定。我创建了以下 "Profile "类来绑定这个配置文件的值。

1.  public class Profile
2.  {
3.  public string FirstName { get; set;} .
4.  公共 字符串 LastName { get; set;}
5.  public string Designation { get; set;} 公共 字符串 Designation { get;set;}
6.  }

下面的示例展示了如何与配置文件绑定并使用ASP.NET Core MVC应用程序的选项模式。

Startup.cs

1.  public void ConfigureServices(IServiceCollection services)
2.  {
3.  services.AddOptions()。
4.  services.Configure<Profile>(Configuration.GetSection("Profile"))。
5.  services.AddMvc()。
6.  }

HomeController.cs

1.  using Microsoft.AspNetCore.Mvc;
2.  using Microsoft.Extensions.Configuration;
3.  using Microsoft.Extensions.Options;

5.  public class HomeController : Controller
6.  {
7.  Profile \_profile。
8.  public HomeController(IOptions<Profile> Profile)
9.  {
10.  \_profile = Profile.Value;
11.  }
12.  \[Route("home/index")\]
13.  公共 IActionResult Index( )
14.  {
15.  ViewBag.FirstName = \_profile.FirstName;
16.  返回 View()。
17.  }
18.  }

总结

ASP.NET Core提供了一个灵活的配置模型,支持多种不同的配置方式,如基于文件、内存中和环境变量。这也支持选项模型,这样我们就可以向我们的应用程序强行注入设置。