Как мне зарегистрировать интерфейсы по умолчанию в замке Виндзор с данным предком интерфейса?
У меня есть следующее:
interface IAncestor { }
interface IDescendant1 : IAncestor { }
interface IDescendant2 : IAncestor { }
class Descendant1 : IDescendant1 { }
class Descendant2 : IDescendant2 { }
То, что я хотел бы сделать, это чтобы Виндзорский замок автоматически нашел все IDescendantX
-DescendantX
пары без меня, чтобы указать их вручную. Это возможно?
Я пробовал:
container.Register(
Classes.FromThisAssembly()
.BasedOn<IAncestor>()
.WithService.DefaultInterfaces()
.LifestyleTransient()
);
но это не находит интерфейсы по умолчанию. (У меня проблемы с формулировкой моего вопроса с правильной терминологией, поэтому я не смог найти тему на SO, которая уже отвечает на этот вопрос, извините, если это дубликат...)
1 ответ
Решение
Думаю, что проблема здесь заключается в отсутствии модификаторов доступа. Если вы добавите IncludeNonPublicTypes(), то пройдёт следующий тест:
[Test]
public void Test()
{
//Arrange
WindsorContainer sut = new WindsorContainer();
//Act
sut.Register(
Classes.FromThisAssembly()
.IncludeNonPublicTypes()
.BasedOn<IAncestor>()
.WithService.DefaultInterfaces()
.LifestyleTransient());
//Assert
Assert.That(sut.Resolve<IDescendant1>(), Is.InstanceOf<Descendant1>());
Assert.That(sut.Resolve<IDescendant2>(), Is.InstanceOf<Descendant2>());
}