У меня есть основное приложение Java с несколько сложными аргументами командной строки. Эти аргументы в настоящее время обрабатываются классом CommandLineArgumentProcessor
. Вот как выглядит мой текущий код:Лучший способ поменять привязки Guice на основе параметра командной строки
public static void main(String[] args) {
Injector injector = Guice.createInjector(new ConfigModule(), new WorkModule(), new ReportModule);
injector.getInstance(I_CommandLineArgumentProcessor.class).processArguments(args);
//Its not until here that I know if I should stub or not with this implementation
...
}
Теперь я реализую способ отсечения некоторых классов для тестирования системы. Для этого мне нужно поменять некоторые привязки, которые использует Guice. Затем в командной строке я укажу некоторые флаги для включения/выключения воспроизведения различных функций. Однако моя проблема заключается в том, что аргументы не обрабатываются до тех пор, пока не будет создан инжектор.
Должен ли я иметь отдельную логику для обработки моих обрезных флагов до создания инжектора, а затем условно создать соответствующий инжектор? Я не решаюсь на этот подход, потому что он делит логику обработки аргументов командной строки на две области кода. Или есть другой (подходящий) способ заставить Guice заменить различные объекты/поддеревья на графе объектов после создания инжектора? Или у меня есть один инжектор для процессора командной строки, а затем создать еще один для остальной части модулей?
Спасибо Колин. Первый подход нескольких инжекторов вырос на меня, и я думаю, что это будет тот, который я использую. Как новичок в Guice, у меня есть достаточно «странных вещей», чтобы справиться, так что я сохраню это просто на данный момент! Но я думаю, что я понимаю, что вы пример провайдера. –