Pregunta

He fijado mi proyecto MVC utilizar Fluido validación y el castillo de Windsor y todo funciona maravillosamente. Estoy utilizando una costumbre Validador de fábrica que tener en cuenta que yo también estoy usando Entity Framework y tienen que dar cuenta de los proxies dinámicos que se enrolle alrededor de mis clases POCO. Aquí está mi 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;
}

Todo está funcionando bien cuando existe un validador para el modelo que la acción del controlador es vinculante modelo. Si no existe un validador para ese modelo en particular, entonces me sale un error que Windsor no puede resolver ese tipo.

Sin embargo, no todos los modelos necesitan un validador. Puedo escribir una vacía, pero eso es sólo código inútil. ¿Debo coger el error e ignorarlo cuando estoy tratando de resolver un validador? ¿Hay algo integrado en el castillo que me va a ayudar con esto? ¿Qué debo hacer?

¿Fue útil?

Solución

Lo que terminé haciendo con esto era para coger el ComponentNotFoundException dentro de mi ValidatorFactory y nula volviendo de esta manera:

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

No del todo seguro de que es lo mejor que puede hacer, pero parece que funciona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top