Что эквивалентно этому в замке Виндзор? - PullRequest
0 голосов
/ 04 декабря 2018

Предположим, у меня есть, например:

public interface IYetAnotherInterface : IMyBaseInterface
public class JustAClass: IYetAnotherInterface

с использованием контейнера Unity DI, это действительно:

container.RegisterType<IMyBaseInterface, IYetAnotherInterface>();
container.RegisterType<IYetAnotherInterface, JustAClass>();

Как я могу сделать это с помощью Castle Windsor?Это не удается:

container.Register(
   Component
      .For<IMyBaseInterface>()
      .ImplementedBy<IYetAnotherInterface >());

container.Register(
   Component
      .For<IYetAnotherInterface >()
      .ImplementedBy<JustAClass>());

Я пытаюсь разрешить IYetAnotherInterface в ctor, например,

public Foo(IYetAnotherInterface i, ...)

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я не уверен, что вещь container.RegisterType<Interface1, Interface2>(); делает в Unity.Похоже, он подключает компонент для одного, а также разрешает для другого?

Если это так, у вас есть два варианта.

  • Перейти к тому, что @ vzwick'sВ ответе говорится, что если вы хотите иметь два компонента.

  • Если вам нужен только один компонент, выполните следующие действия.

.

Component
   .For<IMyBaseInterface, IYetAnotherInterface>()
   .ImplementedBy<JustAClass>()

Таким образом, в первом варианте вы получаете два отдельных компонента, каждый из которых поддерживается JustAClass, каждый из которых предоставляет один сервисный интерфейс: один для IMyBaseInterface, а другой для IYetAnotherInterface.

Во втором варианте вы получаете один компонент, который предоставляет IMyBaseInterface и IYetAnotherInterface.

В документации есть довольно хорошее объяснениепонятия, и я настоятельно рекомендую ознакомиться с ним.

0 голосов
/ 04 декабря 2018
container.Register(
    Component
      .For<IMyBaseInterface>()
      .ImplementedBy<JustAClass>());

container.Register(
    Component
      .For<IYetAnotherInterface >()
      .ImplementedBy<JustAClass>());

На самом деле, для данного сценария (ctor с зависимостью от IYetAnotherInterface) достаточно только второй регистрации.

...