2017-02-02 2 views
1

ASP.NET Core 1.1 솔루션에서 구성 바인딩을 사용하고 있습니다. 기본적으로,이처럼 보이는 내 ConfigureServices 바인딩 시작 섹션에 대한 몇 가지 간단한 코드가 있습니다 :속성에 대한 사용자 지정 구성 바인더

services.AddSingleton(Configuration.GetSection("SettingsSection").Get<SettingsClass>()); 

주름입니다 일반적으로 구성 파일에 int 값에 바인딩하는 int 속성으로 내 수업, 대신 "disabled"문자열에 바인딩 될 수 있습니다. 후드 아래에서 문자열이 "disabled"에 바인딩되어 있으면 속성 값이 -1이 되길 원합니다.

더 복잡 할 수 있지만 간결함을 위해 단순화했습니다.

내 질문은 : 사용자 지정 바인더/변환기를 제공하여 설정 변환을 수행 할 때 "disabled"를 -1로 변환 할 수 있도록 SettingsClass의 특정 속성에 대한 구성 바인딩을 재정의하려면 어떻게해야합니까? "disabled"가 Int32로 변환 될 수 없다는 예외입니까?

답변

1

ConfigurationBinder가 변환기를 가져 오기 위해 형식의 TypeDescriptor를 사용하기 때문에 내가하려는 일을 수행하는 유일한 방법은 사용자 지정 형식 변환기를 구현하여 클래스 I에 대한 TypeDescriptor에 삽입하는 것입니다 m 변환 (이 경우 Int32). 구성이 일어나기 전에

그래서, 기본적으로,이 추가

TypeDescriptor.AddAttributes(typeof(int), new TypeConverterAttribute(typeof(MyCustomIntConverter))); 
MyCustomIntConverter 이런 식으로 뭔가 보이는

:는 항상 convery -1 지금은 "장애인"으로,

public class MyCustomIntConverter : Int32Converter 
{ 
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 
    { 
     if (value != null && value is string) 
     { 
      string stringValue = value as string; 
      if(stringValue == "disabled") 
      { 
       return -1; 
      } 
     } 
     return base.ConvertFrom(context, culture, value); 
    } 
} 

잔인한 것 같다을 응용 프로그램의 Int32 everwhere 용. 누구든지이 일을하기에 덜 침략적 인 방법을 알고 있다면 알려주십시오.