質問

私は流暢な検証と城ウィンザーを使用するように設定私のMVCプロジェクトを持って、すべてがとてもうまく行っています。私は私のPOCOクラスに巻き付けます動的プロキシを考慮するために、私はまた、Entity Frameworkのを使用していますことを考慮し、持っているカスタムバリデータファクトリーを使用しています。ここに私の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;
}
バリデータは、コントローラのアクションをモデル結合されていることをモデルに存在する場合、

すべてがうまく機能しています。何のバリデータは、その特定のモデルのために存在しない場合は、私はウィンザーはそのタイプを解決できないというエラーを取得します。

しかし、すべてのモデルには、バリデータを必要としません。私は空のものを書くことができますが、それは単に役に立たないコードです。私は、エラーをキャッチし、私はバリを解決しようとしているときにそれを無視するべきですか?これで私を助ける城に組み込まれたものはありますか?私は何をすべきか?

役に立ちましたか?

解決

私はこれをやってしまったことは、私のValidatorFactory内ComponentNotFoundExceptionをキャッチすることであり、このようにヌルを返します:

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;
        }
    }
}

完全に必ずそれを行うための最善のことだが、それが仕事に思われていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top