Usando el castillo de Windsor con FluentValidation En MVC
-
26-09-2019 - |
Pregunta
Estoy trabajando en conseguir trabajo FluentValidation con el castillo de Windsor. Ya tengo una envoltura alrededor del castillo de Windsor. Aquí está el código para que:
public class ResolveType
{
private static IWindsorContainer _windsorContainer;
public static void Initialize( IWindsorContainer windsorContainer )
{
_windsorContainer = windsorContainer;
}
public static T Of<T>()
{
return _windsorContainer.Resolve<T>();
}
}
Estoy tratando de construir la fábrica FluentValidation como se explica en el http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container
El artículo utiliza StructureMap, pero pensé que podía adaptarlo al castillo de Windsor como esto:
public class CastleWindsorValidatorFactory : ValidatorFactoryBase
{
public override IValidator CreateInstance( Type validatorType)
{
return ResolveType.Of<validatorType>();
}
}
Aviso, sólo estoy tratando de poner en mi envoltorio para que Windsor puede resolver la referencia de tipo.
El problema es que esto no se compila. Recibo el mensaje 'El tipo o espacio de nombres 'validatorType' no se pudo encontrar (¿falta una directiva using o una referencia de ensamblado?)'
¿Cómo puedo hacer este trabajo?
Solución
Añadir este método a la clase ResolveType
:
public static object Of(Type type) {
return _windsorContainer.Resolve(type);
}
A continuación, en su CastleWindsorValidatorFactory
:
public class CastleWindsorValidatorFactory : ValidatorFactoryBase {
public override IValidator CreateInstance(Type validatorType) {
return ResolveType.Of(validatorType) as IValidator;
}
}