EDIT 2018-02-08: Пример проекта, демонстрирующего, как это сделать на https://github.com/ravn/dagger2-named-string-inject-example - Примечание: the whole source is in a single file!Кинжал: Inject @Named строки?
Я смотрю, может ли кинжал заменить наш взгляд на нас (поскольку платформа развертывания Java работает медленно).
Я строю карту строк конфигурации во время выполнения, и я хотел бы, чтобы при необходимости вводил кинжал.
E.g. Если у меня есть
java.util.Map<String, String> map = new java.util.TreeMap<String, String>();
map.put("key", "value");
и
@Inject
Thermosiphon(Heater heater, @Named("key") String value) {
this.heater = heater;
System.out.println("value =" + value);
}
Я хотел бы иметь "значение" впрыскивается в стоимостном выражении.
Примеры в исходном коде не имеют никаких @Named-обычаев. Просто попытка дает следующее исключение:
Exception in thread "main" java.lang.IllegalStateException: Errors creating object graph:
No binding for @javax.inject.Named(value=key)/java.lang.String required by class bar.Thermosiphon
at dagger.internal.ThrowingErrorHandler.handleErrors(ThrowingErrorHandler.java:34)
at dagger.internal.Linker.linkRequested(Linker.java:146)
at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:288)
at dagger.ObjectGraph$DaggerObjectGraph.get(ObjectGraph.java:249)
at app.CoffeeApp.main(CoffeeApp.java:20)
Как я должен подходить к этому?
Несмотря на то, что вначале это выглядело как больше работы, я думаю, что он может дать централизованную документацию о том, какие свойства поддерживаются часто с модульными приложениями, особенно в наших случаях использования. Я дам ему попробовать. –
Было бы очень удобно указать список таких свойств в источнике и получить геттеры, созданные обработчиком аннотаций. Мне не нужны значения по умолчанию - мне нужно исключение во время выполнения, если не указано ключ в сообщении об ошибке. –
Да, я думаю, нам нужно решение кода-gen для этого - то, что генерирует модуль из списка свойств. –