2017-11-22 1 views
0

구성 정보를 검색하는 다양한 방법을 배우려고합니다. 곧 프로젝트를 설정하고 구성하는 데 가장 적합한 경로를 결정할 수 있습니다. 나는 또한 설정을 계산 그래서 사물의 이러한 유형을 할 수있는 분석 방법을 구축했다 등 특정 설정 값을 확인할 수 있어야합니다Asp.Net Core2.0에서 Configuration.GetSection 모든 설정 가져 오기

var sm = new SmsSettings 
    { 
     FromPhone = Configuration.GetValue<string>("SmsSettings:FromPhone"),    
     StartMessagePart = Configuration.GetValue<string>("SmsSettings:StartMessagePart"),    
     EndMessagePart = Configuration.GetValue<string>("SmsSettings:EndMessagePart") 
    }; 

사용하여 다양한 단일 설정에 액세스 할 수 있습니다

및 GetSection이했던 설정 파일의 전체 섹션이 필요했습니다. 잘못되었습니다.

appSettings는 다음은

{ 
"ConnectionStrings": { 
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo;Trusted_Connection=True;MultipleActiveResultSets=true", 
    "ProductionConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo_Production;Trusted_Connection=True;MultipleActiveResultSets=true" 
}, 
"Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
    "Default": "Warning" 
    } 
}, 
"SmsSettings": { 
    "FromPhone": "9145670987",  
    "StartMessagePart": "Dear user, You have requested info from us on starting",  
    "EndMessagePart": "Thank you." 
    } 
} 

이 두 스크린 샷입니다 파일을 어떤

var section = Configuration.GetSection("ConnectionStrings"); 

반환

Image 1: variable properties

Image 2: Drilling down into JsonConfigurationProvider

몇 가지 질문이 제기됩니다. 이이 appsettings.json 파일의 모든 설정이 포함되어 하나의 3 가지 JsonConfigurationProviders, 반환

  • 왜 GetSection 아니다 (그림 2 참조) 왜

    1. 는 ("ConnectionStrings") 실제로 사용은 그 일을, ConnectionStrings의 하위 하위 항목을 반환합니다.
    2. 주어진 숫자 2, 실제로 ConnectionStrings의 하위 항목을 검색하는 방법은 무엇입니까?
    3. 모델 연결 문자열이 하나의 속성 인 연결 목록을 사용한다고 가정하면 섹션을 개체로 변환 할 수 있습니까?
  • +0

    당신은 시간이 좀 걸릴 및 설명서를 검토해야합니다. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration – Nkosi

    +0

    이러한 메서드는 바인딩을 구성에 설정할 때 사용하기위한 것입니다. 그들은 구문 분석을위한 것이 아닙니다. – Nkosi

    +0

    @ Nkosi ... 분명히 읽으십시오. 그 문서에서 설명한 방식으로 설정을 검색 할 수 있지만 GetSection에 대한 설명은 "지정된 키가있는 구성 하위 섹션을 가져옵니다"라는 것을 알고 있습니다. 왜 모든 파일이 반환되고 단지 키 어린이가 반환되는 지 알 수 없습니다. 나는 둘 다 할 수 있어야한다 var section = Configuration.GetSection ("ConnectionStrings"); 그리고 var section = Configuration [ "ConnectionStrings"] 그리고 똑같은 것을 돌려 줄 것입니다. – dinotom

    답변

    0

    GetSection에 의해 반환 된 개체에서 Bind 메서드를 사용하면 섹션 내에서 키 값 쌍이 바인딩 된 개체의 해당 속성에 바인딩됩니다. 예를 들어

    ,

    class ConnectionStrings { 
        public string DefaultConnection { get; set;} 
        public string ProductionConnection {get; set;} 
    } 
    

    ..

    var connectionStrings = new ConnectionStrings(); 
    var section = Configuration.GetSection("ConnectionStrings").Bind(connectionStrings); 
    
    +0

    @Rufus ... 닫기 ... 바인드를 var로 설정할 수 없습니다. 그래서 왼쪽에있는 부분을 제거하십시오 = 그리고 지금 당신은 connectionStrings에 바인딩 ... 저에게 도움이되지 않는 문제는 바인딩 할 클래스를 생성하기 위해 설정 파일에 어떤 문자열이 있는지 정확히 알아야한다는 것입니다. 파일에서 whats를보고 문자열 목록을 만들려고 시도하는 중입니다. – dinotom

    +0

    배열을 사용할 수 있습니다. –

    +0

    예를 들어, ConnectionName 및 ConnectionString 속성을 사용하여 Connection 유형의 객체를 만듭니다. 그런 다음 Connection 객체의 배열로 property를 사용하여 ConnectionArray 유형의 객체를 만듭니다. appsettings.json을 적절히 조정하고 대신 ConnectionArray를 바인딩하십시오. 이렇게하면 연결 이름을 통해 액세스 할 수있는 알 수없는 연결 문자열을 가질 수있는 유연성이 제공됩니다. –