Question

J'ai installé mon projet MVC utiliser Fluent La validation et le château de Windsor et tout fonctionne à merveille. J'utilise une coutume Validator usine de prendre en compte que je suis également en utilisant Entity Framework et doivent rendre compte des proxies dynamiques qui s'entortiller autour de mes cours de POCO. Voici mon 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;
}

Tout fonctionne bien quand un validateur existe pour le modèle que l'action du contrôleur est la liaison modèle. Si aucun validateur existe pour ce modèle particulier, je reçois une erreur de Windsor ne peut pas résoudre ce type.

Mais, tous les modèles ont besoin d'un validateur. Je peux écrire un vide, mais qui est juste le code inutile. Dois-je attraper juste l'erreur et l'ignorer quand je suis en train de résoudre un validateur? Y at-il quelque chose de construit dans le château qui me aider? Que dois-je faire?

Était-ce utile?

La solution

Ce que je fini par faire c'était pour attraper le ComponentNotFoundException dans mon ValidatorFactory et retourner null comme ceci:

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

Pas tout à fait sûr qu'il est la meilleure chose à faire, mais il semble fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top