Domanda

sto lavorando per ottenere lavoro FluentValidation con il Castello di Windsor. Ho già un wrapper per il Castello di Windsor. Ecco il codice per questo:

public class ResolveType  
{  
    private static IWindsorContainer _windsorContainer;  

    public static void Initialize( IWindsorContainer windsorContainer )  
    {  
        _windsorContainer = windsorContainer;  
    }  

    public static T Of<T>()  
    {  
        return _windsorContainer.Resolve<T>();  
    }  
}  

Sto cercando di costruire la fabbrica FluentValidation come è spiegato in http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container

L'articolo utilizza StructureMap, ma ho pensato che potrei adattarlo al Castello di Windsor in questo modo:

public class CastleWindsorValidatorFactory : ValidatorFactoryBase
{

    public override IValidator CreateInstance( Type validatorType)
    {
        return ResolveType.Of<validatorType>();
    }
}

Si noti, sto solo cercando di chiamare nel mio involucro in modo da Windsor può risolvere il riferimento tipo.

Il problema è che questo non può essere compilato. Ottengo 'Il tipo o dello spazio dei nomi il nome 'validatorType' non è stato trovato (che le manca un un riferimento all'assembly direttiva using o?)'

Come posso fare questo lavoro?

È stato utile?

Soluzione

Aggiungi questo metodo per la classe ResolveType:

public static object Of(Type type) {
  return _windsorContainer.Resolve(type);
}

Poi, nel tuo CastleWindsorValidatorFactory:

public class CastleWindsorValidatorFactory : ValidatorFactoryBase {
    public override IValidator CreateInstance(Type validatorType) {
        return ResolveType.Of(validatorType) as IValidator;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top