Настройте Guice так, чтобы он содержал 2 службы одного типа с различными реализациями их зависимостей. - PullRequest
0 голосов
/ 03 декабря 2018

Я хотел бы спросить, как настроить Guice, чтобы результирующий контейнер DI содержал 2 экземпляра одного и того же класса, но каждый из них имел различную реализацию своих зависимостей.

Рассмотрим классы:

interface Foo {}
class FooImpl1 implements Foo {}
class FooImpl2 implements Foo {}
class Bar(Foo foo) {}

Предположим, что вы можете выполнить настройку зависимостей с использованием некоторого YAML (ish)

services:
    - 
        name: "Bar-1"
        type: Bar
        dependencies:
            - FooImpl1
    - 
        name: "Bar-2"
        type: Bar
        dependencies:
            - FooImpl2

Обратите внимание, что является логикой реализации в конфигурации YAML, утверждая, что, например, Bar с именем Bar-1 (нам нужно как-то назвать наши экземпляры, чтобы иметь возможность различать их, поскольку они имеют одинаковый тип), будет поставляться с FooImpl1, иэкземпляр с именем Bar-2 с FooImpl2.

Как я могу добиться этого с помощью конфигурации Guice?Я явно подчеркиваю, что не хочу каким-либо образом изменять классы кода.

Спасибо!

...