2012-11-02 52 views
0

我最近發現了企業驗證庫,並使用它來驗證我的app.config文件。我大部分的字符串都很容易應用驗證。我也有例如在一些布爾:企業庫5驗證類型安全嗎?

class Options 
{ 
    public bool IsRed { get; set; } 
    public bool IsBlue { get; set; } 
} 

,然後我的app.config裏面:

<!--Options--> 
<add key ="IsRed" value="true"/> 
<add key ="IsBlue" value="Maybe"/> 

是否可以應用驗證規則來檢查app.config文件中建議,以確保價值實際上是一個布爾?

我已經能夠拿出最好的是這樣的:

class Options 
{ 
    [TypeConversionValidator(typeof(bool), MessageTemplate = "IsRed value must be a true/false")] 
    public string IsRed { get; set; } 
    [TypeConversionValidator(typeof(bool), MessageTemplate = "IsBlue value must be a true/false")] 
    public string IsBlue { get; set; } 
} 

這會工作,但後來我處理字符串,而不是布爾值。

回答

0

我決定使用動態類型。我現在的代碼如下所示:

class Options 
{ 
    [TypeConversionValidator(typeof(bool), MessageTemplate = "IsRed value must be a true/false")] 
    public dynamic IsRed { get; set; } 
    [TypeConversionValidator(typeof(bool), MessageTemplate = "IsBlue value must be a true/false")] 
    public dynamic IsBlue { get; set; } 
} 

    private ValidationResults LoadOptions() 
    { 
     _options.IsRed = ConfigurationManager.AppSettings["IsRed"]; 
     _options.IsBlue = ConfigurationManager.AppSettings["IsBlue"]; 

     var valFactory = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>(); 
     var cusValidator = valFactory.CreateValidator<Options>(); 
     var optionValidator = cusValidator.Validate(_options); 

     if (optionValidator.IsValid) 
     { 
      _options.IsBlue = Convert.ToBoolean(_options.IsBlue); 
      _options.IsRed = Convert.ToBoolean(_options.IsRed); 
     } 

     return optionValidator; 
    }