Использование двух производителей CDI для одного и того же класса в отдельных пакетах (Intellij) - PullRequest
0 голосов
/ 16 января 2020

У меня есть простое приложение, которое использует CDI (я разрабатываю в Intellij IDE). При инициализации используется производитель

   @Produces
   public @Alg int getExperimentSize() {
       return 1000;
   }

Я хотел бы иметь две конфигурации для двух отдельных основных файлов (скажем, одну с 1000 и одну с 100). Это приводит к ошибке «Неоднозначные зависимости». Я пытался сделать производителей закрытыми, а также переместить основные файлы в разные пакеты, но они все еще видны друг другу, и ошибка не исчезла.

Можно ли запустить две разные основные функции с разными инъекциями в одном и том же Проект Intellij?

Редактировать: Следуя комментарию @Smutje, я приведу более сложный пример: предположим, что у нас есть интерфейс

public interface SortingAlgorithm <T extends Comparable<T>>{
    void sort(T[] array);
}

Класс AlgorithmRunner внедряется с таким атрибутом

public class AlgorithmRunner {
    @Inject @Quad
    SortingAlgorithm quadraticAlgorithm;
}

Команда A разрабатывает класс, реализующий интерфейс

public class BubbleSort implements SortingAlgorithm{
}

и внедряет его, используя производителя

    @Produces
    private  @Quad
    SortingAlgorithm makeQuadSortingAlg() {
        return container.instance().select(BubbleSort.class).get();
    }

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

1 Ответ

0 голосов
/ 16 января 2020

Есть ли причина, по которой вы хотите, чтобы два отдельных Java класса были производителями?

В подобных ситуациях, когда я хочу поддерживать настраиваемое поведение, у меня обычно бывает один производитель, который производит конфигурацию, и что загружает свои конфигурации, например, из файла свойств в @PostConstruct - поэтому у меня есть один производитель (без неоднозначных зависимостей), но также нет жестко заданных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...