2010-08-06 40 views
2

我已經安裝了我的MVC項目以使用Fluent驗證和Castle Windsor,並且所有工作都非常好。我正在使用自定義驗證工廠,以考慮我也在使用實體框架,並且必須考慮纏繞在我的POCO類中的動態代理。這裏是我的CastleWindsorValidatorFactory:Castle Windsor和Fluent驗證作爲MVC驗證程序

public override IValidator CreateInstance(Type validatorType) 
{ 
    if(validatorType.GetGenericArguments()[0].Namespace.Contains("DynamicProxies")) 
    { 
     validatorType = Type.GetType(String.Format("{0}.{1}[[{2}]], {3}", validatorType.Namespace, validatorType.Name, validatorType.GetGenericArguments()[0].BaseType.AssemblyQualifiedName, validatorType.Assembly.FullName)); 

    } 

    return ResolveType.Of(validatorType) as IValidator; 
} 

一切運作良好時,驗證存在控制器動作模型綁定模型。如果該特定模型不存在驗證程序,則會出現Windsor無法解析該類型的錯誤。

但是,並非所有模型都需要驗證器。我可以寫一個空的,但這只是無用的代碼。當我試圖解析驗證器時,是否應該捕獲錯誤並忽略它? Castle裏面有什麼東西可以幫助我嗎?我該怎麼辦?

回答

0

我最終什麼了這個做是爲了趕上我的ValidatorFactory內ComponentNotFoundException並返回NULL這樣的:

public class CastleWindsorValidatorFactory : ValidatorFactoryBase 
{ 
    public override IValidator CreateInstance(Type validatorType) 
    { 
     if(validatorType.GetGenericArguments()[0].Namespace.Contains("DynamicProxies")) 
     { 
      validatorType = Type.GetType(String.Format("{0}.{1}[[{2}]], {3}", validatorType.Namespace, validatorType.Name, validatorType.GetGenericArguments()[0].BaseType.AssemblyQualifiedName, validatorType.Assembly.FullName)); 

     } 

     try 
     { 
      return ResolveType.Of(validatorType) as IValidator; 
     } 
     catch(ComponentNotFoundException) 
     { 
      return null; 
     } 
    } 
} 

不能完全確定這是做的最好的事情,但它似乎工作。