博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET Core配置文件加载与DI注入配置数据
阅读量:6825 次
发布时间:2019-06-26

本文共 3798 字,大约阅读时间需要 12 分钟。

.NET Core配置文件

在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更加方面灵活,而且可以使用.NET Core中的DI注入配置数据。

使用:

1             var config = new ConfigurationBuilder()2                 .AddInMemoryCollection()    //将配置文件的数据加载到内存中3                 .SetBasePath(Directory.GetCurrentDirectory())   //指定配置文件所在的目录4                 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)  //指定加载的配置文件5                 .Build();    //编译成对象  6             Console.WriteLine(config["test"]);  //获取配置中的数据7             config["test"] = "test test";   //修改配置对象的数据,配置对象的数据是可以被修改的8             Console.WriteLine(config["test11"]);    //获取配置文件中不存在数据也是不会报错的9             Console.WriteLine(config["theKey:nextKey"]);    //获取:theKey -> nextKey 的值

配置文件appsettings.json文件内容:

1 {2   "test": "testVal",3   "theKey": {4     "nextKey": "keyVal"5   }6 }

 注意:

ConfigurationBuilder需要添加包:"Microsoft.Extensions.Configuration"

AddJsonFile需要添加包:"Microsoft.Extensions.Configuration.Json"

 

与DI配合使用

1             var sp = new ServiceCollection() 2                 .AddOptions()   //注入IOptions
,这样就可以在DI容器中获取IOptions
了 3 .Configure
(config.GetSection("TestCls")) //注入配置数据 4 //也可以对注入的配置数据进行修改 5 .Configure
(t => 6 { 7 t.Name = "Jame"; //修改Name的值 8 }) 9 .BuildServiceProvider(); //编译10 11 var test = sp.GetService
>(); //获取注入的配置数据对象12 Console.WriteLine(JsonConvert.SerializeObject(test.Value)); //{"Name":"Jame","Age":123}13 14 //下面的代码中检验Configure注入的配置数据对象是单例模式的(.NET Core中DI容器的三种生命周期:Singleton(单例), Scoped(作用域), Transient(瞬态))15 var test1 = sp.GetService
>();16 Console.WriteLine(test == test1); //true17 //创建一个新的作用域获取配置数据对象18 var test2 = sp.GetService
().CreateScope().ServiceProvider.GetService
>();19 Console.WriteLine(test == test2); //true

 配置测试类:

1         public class TestCls2         {3             public string Name { get; set; }4             public int Age { get; set; }5         }

appsettings.json中的内容:

1 {2   "TestCls": {3     "Name": "Tom",4     "Age": 1235   }6 }

注意:

ServiceCollection需要添加包: "Microsoft.Extensions.DependencyInjection"

AddOptions需要添加包: "Microsoft.Extensions.Options.ConfigurationExtensions"

 

ASP.NET Core中使用

Startup.cs -> Startup构造方法中进行初始化配置文件:

1             var builder = new ConfigurationBuilder()2                 .AddInMemoryCollection()3                 .SetBasePath(env.ContentRootPath)4                 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)5                 .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);6             Configuration = builder.Build();

Startup.cs -> ConfigureServices方法中进行注入配置数据:

1             services.AddOptions()        //注入IOptions
2 .Configure
(Configuration.GetSection(nameof(TestCls)))3 .Configure
(test =>4 {5 test.Name = "Jame"; //修改Name的值6 });

配置文件中的配置数据:

1 { 2   "Logging": { 3     "IncludeScopes": false, 4     "LogLevel": { 5       "Default": "Debug", 6       "System": "Information", 7       "Microsoft": "Information" 8     } 9   },10   "TestCls": {11     "Name": "Tom",12     "Age": 12313   }14 }

注入到控制器中:

1     [Route("api/[controller]")] 2     public class ValuesController : Controller 3     { 4         IOptions
_test; 5 public ValuesController(IOptions
test) 6 { 7 _test = test; 8 } 9 [HttpGet]10 public string Gets()11 {12 return JsonConvert.SerializeObject(_test.Value);13 }

转载地址:http://wzrzl.baihongyu.com/

你可能感兴趣的文章