Quanto segue è un'approssimazione del problema che sto affrontando.Guice: Come modificare l'iniezione su runtime basato su una (proprietà web dinamica)
Pensa di avere un validatore di password con alcune regole.
public interface RuleChecker{
//Checks for a password strenght, returns 10
//for strong or 0 for soft password.
int check(String pass);
}
E quindi abbiamo diverse implementazioni, il nostro servizio accetterà solo la password se è superiore a 8 punti.
public class NoCheck implements RuleChecker {
public int check(String pass){return 10;}
}
public class LengthCheck implements RuleChecker{
...
}
public class AlphanumericCheck implements RuleChecker{
...
}
public class AlphaAndLenghtCheckAdapter implements RuleChecker{
...
}
Ma a scopo di test, vogliamo implementare un webservice all'interno dell'applicazione in cui possiamo "admin" quelle regole, e selezionare quelli da avere.
public class PasswordCheckService{
private RuleChecker checker;
@Inject
public PasswordCheckService(final RuleChecker checker){
this.checker = checker;
}
public boolean checkPassword(String password){
return checker.check(password) > 8;
}
}
Quindi, c'è un modo in Guice, di cambiare in fase di esecuzione, l'iniezione di un servizio ha?
Esempio:
Abbiamo iniziato l'applicazione e per impostazione predefinita LengthCheck viene selezionato e iniettato sulla domanda, sul sito selezioniamo la casella di controllo NOCHECK e salvare le opzioni, che è memorizzato nel database, posso configurare Guice a cambia automaticamente il bean che il servizio aveva iniettato in precedenza? quindi da ora in poi non ci saranno controlli sulle nuove password?
-
Per il momento, ho trovato questi argomenti
Google Guice and varying injections at runtime ma non so se questo tipo di fornitori si inserisce il mio problema.
Guice runtime dependency parameters reinjection Quella bella domanda sta parlando di qualcosa di simile, ma non quello che sto cercando forma.
guice: runtime injection/binding at command line Questo è il più vicino al mio problema ma lo fa solo all'avvio di "runtime" e non lo modifica nel tempo.
Qualsiasi aiuto?
Grazie!
Utilizzo del suggerimento del primo commento Ho implementato questo POC ma ancora non funziona, se si cambia selezionare un altro pulsante il bean di servizio non viene aggiornato. https://bitbucket.org/ramonboza/guicedynamicconfig
Bella domanda. Ho cercato di fare qualcosa di molto simile. – tom