Внедрение определенных объектов в конкретные конструкторы с помощью Guice - PullRequest
0 голосов
/ 13 июня 2018

Я создаю переменное количество объектов KlasseA и соответствующее количество объектов KlasseB.

KlasseA зависит от ClassZ и ClassY, KlasseB зависит от ClassZ, ClassY и KlasseA.KlasseA и KlasseB должны использовать один и тот же экземпляр ClassY, поскольку он имеет внешнее соединение, которое должно использоваться обоими классами.НО при создании другой пары объектов KlasseA и KlasseB оба должны использовать новый экземпляр ClassY, поскольку они могут не использовать то же соединение, что и другие 2 объекта KlasseA & KlasseB.

Пока я использовал Guiceчтобы внедрить зависимости, но поскольку Guice всегда будет создавать новый экземпляр ClassY или только один экземпляр, если я сделаю его одноэлементным, он действительно не будет работать так, как я планировал.

Теперь мне интересно, есть ли возможность сделать это с Guice или мне лучше выбрать другой подход, например

@Inject
public KlasseA(ClassZ classZ, ClassY classY)
{
    classZ = classZ;
    classY = classY;
}

@Inject
public KlasseB(ClassZ classZ, KlasseA klasseA)
{
    classZ = classZ;
    classY = klasseA.getClassY();
    klasseA = klasseA;
}

Этот способ определенно работает, но вроде какнебольшой взлом, поэтому мне интересно, есть ли у кого-то лучшее решение или что-то вдохновляющее.

1 Ответ

0 голосов
/ 13 июня 2018

Очевидно, что чистого, совместимого с Guice решения можно достичь с помощью фабрики

@Inject
public KlasseA(ClassZ classZ, ClassY classY)
{
    classZ = classZ;
    classY = classY;
}

@Inject
public KlasseB(ClassZ classZ, KlasseA klasseA, @Assisted ClassYFactory classyFactory)
{
    classZ = classZ;
    classY = classyFactory.create(klasseA);
    klasseA = klasseA;
}

Так что Guice по-прежнему обрабатывает зависимость.

...