Использование Castle Windsor с FluentValidation в MVC - PullRequest
2 голосов
/ 13 мая 2010

Я работаю над тем, чтобы FluentValidation работал с Castle Windsor. У меня уже есть обертка вокруг Виндзорского замка. Вот код для этого:

public class ResolveType  
{  
    private static IWindsorContainer _windsorContainer;  

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

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

Я пытаюсь построить фабрику FluentValidation, как описано в http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container

В статье используется StructureMap, но я подумал, что могу адаптировать его для Castle Windsor следующим образом:

public class CastleWindsorValidatorFactory : ValidatorFactoryBase
{

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

Обратите внимание, я просто пытаюсь вызвать свою оболочку, чтобы Виндзор мог разрешить ссылку на тип.

Проблема в том, что это не компилируется. Я получаю 'Не удалось найти тип или имя пространства имен' validatorType '(отсутствует директива using или ссылка на сборку?)

Как я могу сделать эту работу?

1 Ответ

4 голосов
/ 13 мая 2010

Добавьте этот метод к вашему ResolveType классу:

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

Тогда в вашем CastleWindsorValidatorFactory:

public class CastleWindsorValidatorFactory : ValidatorFactoryBase {
    public override IValidator CreateInstance(Type validatorType) {
        return ResolveType.Of(validatorType) as IValidator;
    }
}
...