在给定接口祖先的情况下,如何向Castle Windsor注册默认接口?

时间:2016-02-15 14:33:40

标签: castle-windsor-3

我有以下内容:

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上找到已回答这个问题的主题,对不起,如果它是重复的......)

1 个答案:

答案 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>());
}