Utilizzando il Castello di Windsor con FluentValidation In MVC
-
26-09-2019 - |
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?
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;
}
}