Как Castle Windsor отвечает на класс, который реализует несколько интерфейсов? - PullRequest
5 голосов
/ 27 января 2009

Например, у меня есть два интерфейса: ICustomerService и IOrderService, каждый из которых имеет несколько функций, таких как GetCustomer, GetOrder и т. Д.

Я хочу, чтобы один класс реализовывал оба интерфейса: Сервер.

Как Касл Виндзор реагирует на это? Возможно ли это в первую очередь? Когда я разрешу объект Server на основе одного из двух интерфейсов, получу ли я один и тот же объект? Что происходит, когда у меня есть конструктор, который имеет оба интерфейса в своих параметрах? Будет ли еще построен один объект.

при условии, что для LifeStyle установлено значение по умолчанию: Singleton.

Ответы [ 2 ]

4 голосов
/ 23 апреля 2011

Нет жесткого однозначного сопоставления между типом CLR и сервисом или компонентом Windsor (здесь имеется глоссарий ).

Таким образом, вы можете иметь любой из следующих сценариев:

  • Многие Компоненты с различными типами реализации предоставляют один Сервис

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IFoo>().ImplementedBy<Foo2>()
    );
    
  • Многие Компоненты с одинаковым типом реализации предоставляют один Сервис

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IFoo>().ImplementedBy<Foo1>().Named("second")
    );
    
  • Многие Компоненты с одинаковым типом реализации предоставляют разные Услуги

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IBar>().ImplementedBy<Foo1>().Named("second")
    );
    
  • Один компонент предоставляет различные услуги

    container.Register(
       Component.For<IFoo, Bar>().ImplementedBy<Foo1>()
    );
    

Как видите, да - это возможно, и от того, какой вариант вы выбрали, зависит, получите ли вы один и тот же экземпляр (при условии, что синглтон) - будут ли оба Сервиса предоставлены одним и тем же Компонентом или нет.

3 голосов
/ 27 января 2009

Вы проверяли этот пост ?

Здесь также

На форуме также есть информация об этом

...