Ho un metodo fornitore in un modulo annotato con @Provides:Guice: come configurare un @Provides e @Singleton in un modulo in questo caso?
@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
e ho annotato il mio ChatServicePerformanceMonitor con @Singleton. Nel mio codice, dove uso questa istanza, non posso fare a meno di iniettarla "passivamente", a causa di un framework che sto usando che sta costruendo la classe di inclusione (non usa Guice, quindi questo è l'unico modo che conosco di per ottenere il riferimento):
chatServicePerfMon = injector.getInstance(ChatServicePerformanceMonitor.class);
sembra Guice non rispetta l'annotazione @Singleton sulla mia classe ChatServicePerformanceMonitor. Ricevo un'istanza per ogni chiamata a injector.getInstance (ChatServicePerformanceMonitor.class).
Aggiunta del @Singleton al metodo fornitore sembra per risolvere questo problema:
@Provides @Singleton
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
è che il comportamento previsto? Sembra che @Singleton sull'istanza sia tutto ciò di cui ho bisogno.
Come stai creando il 'ChatServicePerformanceMonitor' nel tuo primo snippet di codice? Se Guice non lo sta creando nel tuo metodo 'getChatServicePerfMon', il' @ Singleton' verrà ignorato. – condit
Sì, è costruito all'interno del metodo @Provider, quasi esattamente come descritto [qui] (https://code.google.com/p/google-guice/wiki/ProvidesMethods) nel metodo provideTransactionLog. Sembra che debba essere qualcosa che sto facendo, come qualcun altro deve aver avuto questo problema. Ma non riesco a vedere nulla che non sia molto diverso dai loro esempi, a parte il fatto che ottengo l'istanza direttamente da un iniettore. –