Я пытаюсь использовать Windsor в качестве фабрики для обеспечения реализации спецификаций, основанных на подтипах XAbstractBase
(абстрактный класс базового сообщения в моем случае).
У меня есть код, подобный следующему:
public abstract class XAbstractBase { }
public class YImplementation : XAbstractBase { }
public class ZImplementation : XAbstractBase { }
public interface ISpecification<T> where T : XAbstractBase
{
bool PredicateLogic();
}
public class DefaultSpecificationImplementation : ISpecification<XAbstractBase>
{
public bool PredicateLogic() { return true; }
}
public class SpecificSpecificationImplementation : ISpecification<YImplementation>
{
public bool PredicateLogic() { /*do real work*/ }
}
Код регистрации моего компонента выглядит следующим образом:
container.Register(
AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn(typeof(ISpecification<>))
.WithService.FirstInterface()
)
Это прекрасно работает, когда я пытаюсь разрешить ISpecification<YImplementation>
;он правильно разрешает SpecificSpecificationImplementation
.
Однако, когда я пытаюсь разрешить ISpecification<ZImplementation>
Виндзор выдает исключение:
"No component for supporting the service ISpecification'1[ZImplementation, AssemblyInfo...] was found"
Поддерживает ли Виндзор разрешение базовых классов, если не больше, до базовых классовконкретная реализация зарегистрирована?