2016-02-15 1 views
0

У меня есть следующие:Как зарегистрировать интерфейсы по умолчанию с помощью Castle Windsor, заданного предком интерфейса?

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, которая уже ответила на это, извините, если это дубликат ...)

ответ

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>()); 
} 
+0

D'oh, вы совершенно правы! Благодаря! – Diana