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?

¿Fue útil?

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top