简介
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. }
输出
在控制器中检索配置数据
在上面提到的例子中,我是在启动类本身中检索配置值。新版本的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. }
输出
使用选项模式获取配置对象
选项模式使我们可以使用自定义的选项类来表示一组相关的设置。选项类必须有一个为每个设置定义的公共读写属性,并且该类不能接受任何参数。
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. }
输出
与内存中的提供者一起工作
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提供了一个灵活的配置模型,支持多种不同的配置方式,如基于文件、内存中和环境变量。这也支持选项模型,这样我们就可以向我们的应用程序强行注入设置。