2012-07-24 2 views
1

ConfigurationValidatorAttribute을 쓰거나 다른 방법으로 Prop1Prop2을 모두 사용할 수 있습니까?구성 요소에 두 속성 중 하나를 확인하거나 그렇지 않은 방법을 확인하는 방법은 무엇입니까?

내가 domain3 요소가 둘 다 Prop1Prop2 또는 없음이 있어야합니다 런타임 예외 때문에 싶어 Domains를 얻기 위해 노력하지만,뿐만 아니라 한 것이다 때 다음과 같은 설정 파일에서

수정 됨 그들의!

마찬가지로 IsRequired은 런타임에서 확인되며 요소에 Name 속성이없는 경우 오류가 발생합니다.

<MySection> 
     <Domains> 
      <Domain Name="domain1" Prop1="1" Prop2="4" /> 
      <Domain Name="domain2" /> 
      <Domain Name="domain3" Prop1="1" /> 
     </Domains>   
    </MySection> 

public class ConfigElement : ConfigurationElement 
{  
    [ConfigurationProperty("Name", IsRequired = true)] 
    public string Name 
    { 
     get { return (string)this["Name"]; } 
     set { this["Name"] = value; } 
    }   

    [ConfigurationProperty("Prop1")] 
    public int Prop1 
    { 
     get { return (int)this["Prop1"]; } 
     set { this["Prop1"] = value; } 
    } 

    [ConfigurationProperty("Prop2")] 
    public int Prop2 
    { 
     get { return (int)this["Prop2"]; } 
     set { this["Prop2"] = value; } 
    } 
} 
+0

이 유효성 검사가 실패한 경우 원하는 동작은 무엇입니까? 런타임 예외? –

+0

app.config는 나중에 변경 될 수 있기 때문에 컴파일 오류가 발생한다고 생각하지 않습니다. 그러나 xsd 유효성 검사를 추가 할 수 있습니다. http://stackoverflow.com/questions/334473/providing-intellisense-xsd-validation-to-configsections를 참조하십시오. – Maarten

+0

@dtryon, 내 게시물을 편집했습니다. 예,'IsRequeired'와 비슷한 런타임 예외를 원합니다, 예를 들어, excetpion을 – theateist

답변

2
좋은 예 on this blog post이 당신의 ConfigElement 클래스

protected override void PostDeserialize() 
     { 
      base.PostDeserialize(); 
      //Do what you want 
     } 

ConfigurationElementPostDeserialize을 무시

.

+0

던졌습니다. 정확히 제가 찾고있는 것입니다. 감사! – theateist

+0

ElementInformation.IsPresent와 결합 된이 기능은 "기본 설정이 없습니다"를 "기본 설정"과 다른 경우에 유용합니다. –