>  기사  >  백엔드 개발  >  .NET Core 구성 파일 로드 및 구성 데이터의 DI 주입

.NET Core 구성 파일 로드 및 구성 데이터의 DI 주입

高洛峰
高洛峰원래의
2017-05-26 13:33:002895검색

.NET Core 구성 파일

기존에는 .NET의 구성 파일이 App.config/Web.config 등 XML 형식이었지만, .NET Core에서는 JSON 형식을 사용하는 것이 좋습니다. . 구성 파일은 사용이 더 유연하고 .NET Core에서 DI를 사용하여 구성 데이터를 삽입할 수 있기 때문입니다.

사용법:

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 的值

구성 파일 appsettings.json 파일 콘텐츠:

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

참고:

ConfigurationBuilder에서 패키지를 추가해야 합니다. Microsoft.Extensions.Configuration"

AddJsonFile은 "Microsoft.Extensions.Configuration.Json"

DI와 함께 사용

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

구성 테스트 클래스:

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

appsettings.json의 콘텐츠:

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

참고:

ServiceCollection에서는 "Microsoft.Extensions. 종속성 주입"

AddOptions를 사용하려면 "Microsoft.Extensions.Options.ConfigurationExtensions"

Startup.cs -> 시작 구성 사용 패키지를 추가해야 합니다. ASP.NET Core에서 다음 메서드에서 구성 파일을 초기화합니다.

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 -> 파일:

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

컨트롤러에 삽입됨:

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

액세스:/api/values

[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);
        }
디스플레이: {"Name":"Jame","Age ":123}

[관련 권장 사항]

1.

.Net Core 그래픽 확인 코드

2. .NET Core CLI 도구 문서 dotnet-publish

3. .Net Core용 ZKEACMS 자세히 소개

4. .net MVC의 양식 확인 예제 코드 공유

5. .net 코어에서 http 요청을 만드는 방법은 무엇입니까?

6. CentOS에서 ZKEACMS 실행 인스턴스 튜토리얼

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.