2010-09-30 2 views

ответ

7

Это именно то, как это сделать. См. «Type Forwarding» в документах. Он регистрирует один логический компонент, доступный через IHomeViewModel или IPageViewModel. Следующий тест проходит:

public interface IHomeViewModel {} 
public interface IPageViewModel {} 
public class HomeViewModel: IHomeViewModel, IPageViewModel {} 

[Test] 
public void Forward() { 
    var container = new WindsorContainer(); 
    container.Register(Component.For(new[] {typeof (IHomeViewModel), typeof (IPageViewModel)}) 
     .ImplementedBy(typeof(HomeViewModel)).Named("IHomeViewModel").LifeStyle.Singleton); 
    Assert.AreSame(container.Resolve<IHomeViewModel>(), container.Resolve<IPageViewModel>()); 
} 

BTW вы можете использовать дженерики вместо всех этих typeof, а также удалить объявление образ жизни, так как синглтон по умолчанию:

container.Register(Component.For<IHomeViewModel, IPageViewModel>() 
          .ImplementedBy<HomeViewModel>()); 
+1

также, если вы не используя имя компонента (вы только когда-либо разрешаете его по типу и не используете его как переопределенное имя в любом месте), вы также можете удалить его. –

+0

Спасибо, проблема была в моем коде. – INs

Смежные вопросы