0

私は次のものを持っています:

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()
        );

しかし、これはデフォルトのインターフェースを見つけません。(正しい用語で質問を表現するのに問題があるため、すでにこれに回答しているトピックを見つけることができませんでした。重複している場合は申し訳ありません...)

4

1 に答える 1

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>());
}
于 2016-02-15T22:01:09.310 に答える