Использование замка Windsor с свободностью в MVC
-
26-09-2019 - |
Вопрос
Я работаю над получением свободных действий, работающих с замком Виндзор. У меня уже есть обертка вокруг виндзора замка. Вот код для этого:
public class ResolveType
{
private static IWindsorContainer _windsorContainer;
public static void Initialize( IWindsorContainer windsorContainer )
{
_windsorContainer = windsorContainer;
}
public static T Of<T>()
{
return _windsorContainer.Resolve<T>();
}
}
Я пытаюсь построить фабрику в реальном времени, как это объясняется в http://www.jeremyskinner.co.uk/2010/02/22/using-fluentValidation-with-an-ioc-container.
В статье используются структурныйap, но я подумал, что смогу адаптировать его к замковому виндзору, как это:
public class CastleWindsorValidatorFactory : ValidatorFactoryBase
{
public override IValidator CreateInstance( Type validatorType)
{
return ResolveType.Of<validatorType>();
}
}
Обратите внимание, я просто пытаюсь позвонить в мою оболочку, чтобы Виндзор мог разрешить ссылку на тип.
Проблема в том, что это не скомпилируется. Я получаю «Тип или имя пространства имен» Validatortype 'не найден (вы отсутствуете на директиру с использованием или ссылкой на сборку?)
Как я могу сделать эту работу?
Решение
Добавьте этот метод к вашему 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;
}
}