Guice: So ändern Sie die Injektion zur Laufzeit basierend auf einer (dynamischen Web-Eigenschaft)

9

Das Folgende ist eine Annäherung an das Problem, dem ich gegenüberstehe.

Denken Sie, wir haben einen Passwort-Validator mit einigen Regeln.

%Vor%

Und dann haben wir mehrere Implementierungen, unser Service akzeptiert nur das Passwort, wenn es über 8 Punkte ist.

%Vor%

Aber zu Testzwecken wollen wir einen Webservice innerhalb der Anwendung implementieren, wo wir diese Regeln "administrieren" und auswählen können, welche zu haben.

%Vor%

Also, gibt es irgendeinen Weg in Guice, um zur Laufzeit die Injektion eines Dienstes zu ändern?

Beispiel:

Wir haben die Anwendung gestartet und standardmäßig LengthCheck ausgewählt und in die Anwendung injiziert, auf der Website wählen wir das Kontrollkästchen NoCheck und speichern Optionen, die in der Datenbank gespeichert ist, kann ich Guice konfigurieren, um automatisch die Bohne des Dienstes zu ändern vorher eingespritzt? Also wird es von nun an keine Überprüfung neuer Passwörter geben?

-

Im Moment habe ich diese Themen gefunden

Google Guice und verschiedene Injektionen zur Laufzeit Aber ich weiß nicht, ob diese Art von Anbietern zu meinem Problem passt.

Guice-Laufzeitabhängigkeitsparameter reinjection Diese nette Frage spricht etwas ähnliches, aber nicht das, was ich suche.

guice: Runtime-Injektion / Bindung an der Befehlszeile Dies ist meinem Problem am nächsten, aber er startet nur "runtime" und ändert es nicht im Laufe der Zeit.

Irgendwelche hilft?

Danke!

Unter Verwendung der Spitze des ersten Kommentars habe ich dieses POC implementiert, funktioniert aber immer noch nicht. Wenn Sie eine andere Schaltfläche ändern, wird die Servicebohne nicht aktualisiert. Ссылка

    
RamonBoza 14.10.2013, 10:44
quelle

1 Antwort

4

Erstellen Sie einen Provider für jeden Feldtyp (Login, Passwort, Geburtsdatum ...) mit einem Parameter, um die Implementierung zu ändern.

%Vor%

In Ihrem Admin-Bereich ändern Sie den "type" -Wert, damit sich Ihre Regeln ändern. Es kann eine begrenzte Anzahl von Feldern beeinflussen, dank der Anmerkungen. Zum Beispiel: PasswordRuleCheckerProvider.setType(CheckType.LENGTH); . Wirkt nur auf Felder mit @Named('password') .

Sie müssen Ihre Felder und Dienste wie folgt deklarieren:

%Vor%     
Vianney Dupoy de Guitard 14.10.2013, 11:26
quelle