Использование Castle Windsor для внедрения зависимостей, когда классы наследуются от одного базового класса - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть два класса, которые наследуются от одного базового класса.

public class UserDetailValidator : BaseValidator<UserDetail>{
    public UserDetailValidator(IRepository<Person, Guid> userRepository, AddressValidator addressValidator)
    {
        RuleFor(x => x.FirstName).Length(1, 10);
    }
}

public class AddressValidator : BaseValidator<Address>

Когда я пытаюсь получить UserDetailValidator от WindsorServiceLocator, я получаю ошибку

Отсутствует зависимость.Компонент UserDetailValidator зависит от AddressValidator, который не может быть разрешен.Убедитесь, что зависимость правильно зарегистрирована в контейнере как служба или предоставлена ​​как встроенный аргумент.В моем ValidationInstaller я использую следующее:

container.Register(
AllTypes.FromAssemblyNamed("Validation")
        .IncludeNonPublicTypes()
    .BasedOn(typeof(IValidator<>))
    .WithService.AllInterfaces()
    .LifestyleTransient()

Компонент IRepository внедряется без проблем.Это не только AddressValidator. Что я не делаю правильно?Я использую Castle Windsor 3.0

1 Ответ

0 голосов
/ 11 февраля 2012

Я изменил тип аргумента, передаваемого в UserDetailValidator, с AddressValidator на IValidator.Я все еще должен использовать AllInterfaces (по крайней мере, в моем тестировании до сих пор), но теперь он работает.

...