【问题标题】:Castle Windsor and Fluent Validation as an MVC ValidatorCastle Windsor 和 Fluent Validation 作为 MVC 验证器
【发布时间】:2010-08-06 18:53:28
【问题描述】:

我已经将我的 MVC 项目设置为使用 Fluent Validation 和 Castle Windsor,并且一切运行良好。我正在使用自定义验证器工厂,以考虑到我也在使用实体框架,并且必须考虑到包裹在我的 POCO 类周围的动态代理。这是我的 CastleWindsorValidatorFactory:

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 中是否有内置的东西可以帮助我解决这个问题?我该怎么办?

【问题讨论】:

    标签: asp.net-mvc-2 castle-windsor fluentvalidation


    【解决方案1】:

    我最终做的是在我的 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;
            }
        }
    }
    

    不完全确定这是最好的做法,但它似乎有效。

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2015-11-05
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多