Heim  >  Artikel  >  Backend-Entwicklung  >  Laden der .NET Core-Konfigurationsdatei und DI-Injektion von Konfigurationsdaten

Laden der .NET Core-Konfigurationsdatei und DI-Injektion von Konfigurationsdaten

高洛峰
高洛峰Original
2017-05-26 13:33:002895Durchsuche

.NET Core-Konfigurationsdatei

In der Vergangenheit lagen Konfigurationsdateien in .NET alle im XML-Format vor, z. B. App.config/Web.config, aber in .NET Core wird die Verwendung des JSON-Formats empfohlen . Konfigurationsdateien, da sie flexibler zu verwenden sind und Konfigurationsdaten mithilfe von DI in .NET Core eingefügt werden können.

Verwendung:

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

Inhalt der Konfigurationsdatei appsettings.json:

{
  "test": "testVal",
  "theKey": {
    "nextKey": "keyVal"
  }
}

Hinweis:

ConfigurationBuilder muss das Paket hinzufügen: „ Microsoft. Extensions.Configuration“

AddJsonFile muss das Paket hinzufügen: „Microsoft.Extensions.Configuration.Json“

Mit DI verwenden

var sp = new ServiceCollection()
                .AddOptions()   //注入IOptions<T>,这样就可以在DI容器中获取IOptions<T>了
                .Configure<TestCls>(config.GetSection("TestCls"))   //注入配置数据
                //也可以对注入的配置数据进行修改
                .Configure<TestCls>(t =>
                {
                    t.Name = "Jame"; //修改Name的值
                })
                .BuildServiceProvider();    //编译

            var test = sp.GetService<IOptions<TestCls>>();    //获取注入的配置数据对象
            Console.WriteLine(JsonConvert.SerializeObject(test.Value));    //{"Name":"Jame","Age":123}

            //下面的代码中检验Configure注入的配置数据对象是单例模式的(.NET Core中DI容器的三种生命周期:Singleton(单例), Scoped(作用域), Transient(瞬态))
            var test1 = sp.GetService<IOptions<TestCls>>();
            Console.WriteLine(test == test1);   //true
            //创建一个新的作用域获取配置数据对象
            var test2 = sp.GetService<IServiceScopeFactory>().CreateScope().ServiceProvider.GetService<IOptions<TestCls>>();
            Console.WriteLine(test == test2);   //true

Konfigurationstestklasse:

         public class TestCls
         {
             public string Name { get; set; }
             public int Age { get; set; }
         }

Inhalt in appsettings.json:

{
  "TestCls": {
    "Name": "Tom",
    "Age": 123
  }
}

Hinweis:

ServiceCollection muss das Paket hinzufügen: „Microsoft.Extensions. DependencyInjection“

AddOptions erfordert das Hinzufügen des Pakets: „Microsoft.Extensions.Options.ConfigurationExtensions“

Verwendung von

Startup.cs -> Startup-Konstrukt in ASP.NET Core Initialisieren Sie die Konfigurationsdatei in der Methode:

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

Startup.cs -> Fügen Sie Konfigurationsdaten in die Methode „ConfigureServices“ ein:

services.AddOptions()        //注入IOptions<T>
                .Configure<TestCls>(Configuration.GetSection(nameof(TestCls)))
                .Configure<TestCls>(test =>
                {
                    test.Name = "Jame"; //修改Name的值
                });

Konfigurationsdaten in der Konfiguration Datei:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "TestCls": {
    "Name": "Tom",
    "Age": 123
  }
}

In den Controller eingefügt:

[Route("api/[controller]")]
    public class ValuesController : Controller
    {
        IOptions<TestCls> _test;
        public ValuesController(IOptions<TestCls> test)
        {
            _test = test;
        }
        [HttpGet]
        public string Gets()
        {
            return JsonConvert.SerializeObject(_test.Value);
        }

Zugriff:/api/values

Anzeige: {"Name": "Jame", "Alter". ":123 🎜>

[Verwandte Empfehlungen]

1.

.Net Core grafischer Verifizierungscode

2.

.NET Core CLI-Tool Dokumentation dotnet-publish

3.

ZKEACMS für .Net Core im Detail vorstellen

4.

Teilen Sie den Beispielcode für die Formularüberprüfung in .net MVC

5.

Wie mache ich eine HTTP-Anfrage unter .net Core?

6.

Instanz-Tutorial zum Ausführen von ZKEACMS unter CentOS

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn