Frage

ich mein Setup MVC-Projekt haben fliessend Validation and Castle Windsor zu verwenden und alles funktioniert wunderbar. Ich verwende eine benutzerdefinierte Validator Fabrik zu berücksichtigen, dass ich auch Entity Framework verwenden und muß Konto für die dynamischen Proxies, die meine POCO Klassen bekommen umschlungen. Hier ist meine 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;
}

Alles funktioniert gut, wenn ein Validator für das Modell besteht, dass die Controller-Aktion ist das Modell verbindlich. Wenn kein Validator für das jeweilige Modell existiert, dann bekomme ich einen Fehler, dass Windsor nicht diese Art auflösen kann.

Aber nicht alle Modelle benötigen einen Validator. Ich kann einen leeren schreiben, aber das ist nur nutzlos Code. Sollte ich nur fangen den Fehler und ignorieren es, wenn ich versuche, ein Validator zu lösen? Gibt es etwas in Burg gebaut, die mir dabei helfen? Was soll ich tun?

War es hilfreich?

Lösung

Was ich damit am Ende dabei war es, die ComponentNotFoundException in meinem ValidatorFactory und Rückkehr null wie diese zu fangen:

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

Nicht ganz sicher, es ist das Beste, was zu tun, aber es scheint zu funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top