你的位置:首页 > ASP.net教程

[ASP.net教程].NET Core配置文件加载与DI注入配置数据


.NET Core配置文件

在以前.NET中配置文件都是以App.config / Web.config等

使用:

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<T>,这样就可以在DI容器中获取IOptions<T>了 3         .Configure<TestCls>(config.GetSection("TestCls"))  //注入配置数据 4         //也可以对注入的配置数据进行修改 5         .Configure<TestCls>(t => 6         { 7           t.Name = "Jame"; //修改Name的值 8         }) 9         .BuildServiceProvider();  //编译10 11       var test = sp.GetService<IOptions<TestCls>>();  //获取注入的配置数据对象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<IOptions<TestCls>>();16       Console.WriteLine(test == test1);  //true17       //创建一个新的作用域获取配置数据对象18       var test2 = sp.GetService<IServiceScopeFactory>().CreateScope().ServiceProvider.GetService<IOptions<TestCls>>();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<T>2         .Configure<TestCls>(Configuration.GetSection(nameof(TestCls)))3         .Configure<TestCls>(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<TestCls> _test; 5     public ValuesController(IOptions<TestCls> test) 6     { 7       _test = test; 8     } 9     [HttpGet]10     public string Gets()11     {12       return JsonConvert.SerializeObject(_test.Value);13     }

访问:/api/values

显示:{"Name":"Jame","Age":123}