EDIT 2018-02-08: Progetto di esempio che dimostra come eseguire questa operazione in https://github.com/ravn/dagger2-named-string-inject-example - Nota: the whole source is in a single file!Daga: Inietti stringhe @Named?
Sto guardando se dagger può sostituire guice per noi (come la nostra piattaforma Java di implementazione è lenta).
Costruisco una mappa di stringhe di configurazione in fase di esecuzione, che mi piacerebbe avere il pugnale iniettato se necessario.
E.g. Se ho
java.util.Map<String, String> map = new java.util.TreeMap<String, String>();
map.put("key", "value");
e
@Inject
Thermosiphon(Heater heater, @Named("key") String value) {
this.heater = heater;
System.out.println("value =" + value);
}
vorrei avere "valore" iniettato in valore.
Gli esempi nel codice sorgente non hanno alcun utilizzo @Named. Provare solo dà la seguente eccezione:
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)
Come dovrei avvicinarmi a questo?
Anche se inizialmente sembrava più un lavoro, penso che possa fornire la documentazione centralizzata di quali proprietà sono spesso necessarie con le applicazioni modulari, specialmente con i nostri casi d'uso. Farò un tentativo. –
Sarebbe davvero bello specificare un elenco di tali proprietà in origine e avere i getter generati dal processore di annotazione. Non ho bisogno di default - ho bisogno di un'eccezione di runtime se non presente con la chiave nel messaggio di errore. –
Sì, penso che abbiamo bisogno di una soluzione di code-gen per questo - qualcosa che genera un modulo da un elenco di proprietà. –