我有以下内容:
interface IAncestor { }
interface IDescendant1 : IAncestor { }
interface IDescendant2 : IAncestor { }
class Descendant1 : IDescendant1 { }
class Descendant2 : IDescendant2 { }
我希望能够自动让Castle Windsor找到所有IDescendantX
- DescendantX
对,而不必手动指定它们。这可能吗?
我试过了:
container.Register(
Classes.FromThisAssembly()
.BasedOn<IAncestor>()
.WithService.DefaultInterfaces()
.LifestyleTransient()
);
但是找不到默认接口。 (我在用正确的术语来表达我的问题时遇到了麻烦,因此无法在SO上找到已回答这个问题的主题,对不起,如果它是重复的......)
答案 0 :(得分:0)
认为这里的问题是缺少访问修饰符。如果添加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>());
}