Mi piacerebbe creare un modulo che lega dinamicamente le istanze alle annotazioni con nome. Il caso d'uso è che vorrei associare automaticamente i valori nella mia configurazione con la chiave nel file delle proprietà che è il valore @Named.Come si creano associazioni dinamiche in Guice che richiedono un'istanza iniettata?
Tuttavia, la configurazione è associata a un modulo diverso, pertanto è necessario iniettare la configurazione. Le soluzioni che ho esaminato sono:
Collegamento nel metodo configure(). Questo metodo non è stato iniettato e non posso ottenere la configurazione di base.
Utilizzo di un Provider/@ Fornisce. I provider associano solo una singola istanza.
Utilizzo di MultiBinder. Il mio caso d'uso è leggermente diverso da quello fornito da questa estensione. L'associazione multipla consente di associare più istanze separatamente e quindi di inserirle come una raccolta di tipo più complesso. Vorrei associare ogni istanza separatamente e averli identificabili in modo univoco per l'ultimo caso.
Utilizzare un iniettore per bambini. Purtroppo questo non è possibile senza alcune modifiche estensive del codice esistente. This answer è una buona descrizione di come risolvere questo problema in questo modo.
Iniettare il raccoglitore in qualche modo. (Ho iniziato ad avere un po 'di hacker) Guice permette di iniettare l'iniettore per l'ultimo utilizzo, ho provato a iniettare il raccoglitore nel modulo attraverso un metodo @Provides e poi usando il raccoglitore direttamente per creare legature multiple all'interno del metodo. Guice non avrebbe iniettato il legante.
Un'altra buona risposta, grazie! Non sapevo del metodo Names.bindProperties(), dovrò salvarlo per quest'ultimo. Ho provato la soluzione che hai proposto la scorsa notte 2 e ha funzionato soprattutto, anche se non era così pulito che mi sarebbe piaciuto. Fondamentalmente sono arrivato alla conclusione che ciò che mi piacerebbe davvero fare non rientra nel design di Guice. Non possiedo il framework che sto implementando e non credo che gli iniettori possano essere disponibili in qualsiasi momento, quindi ho intenzione di rielaborare la nostra configurazione in un modo leggermente diverso. Grazie per la pronta risposta! –