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

高洛峰
풀어 주다: 2017-05-26 13:33:00
원래의
2901명이 탐색했습니다.

.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 실행 인스턴스 튜토리얼

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿