Hallo, ich versuche mich gerade an einem kleinen Programm und verwende dafür Google Guice.
Beim Programm soll der Benutzer seinen Namen und Passwort eingeben und da diese erst zur Laufzeit bekannt sind, verwende ich für diese Implementierung AssistedInject.
Ich habe hierfür ein Interface UserFactory mit der Methode
Am Anfang des Programms wird dieser User einmalig initialisiert mittels:
und in den folgenden Programmabschnitten will ich auf diese Instanz zugreifen. Dafür habe ich den Scope bereits auf Singleton gesetzt.
Das Problem ist aber, dass ich dauernd Fehlermeldungen kriege. Guice meckert, dass ich keine Variablen übergeben habe. Und wenn ich in die configure-Methode
mache, kommt ein Fehler, dass es keine Deklaration für die Annotation "Assisted" gibt (Es ist ja immerhin so, dass man vor Parametern eine Annotation setzen kann, um diese eindeutig zu identifizieren. Diesen müssen im Injector eine Dependency gegeben werden.)
Ich werde evtl ein KSKB posten. Weiß jemand aber, wie man das umgehen kann?
Edit: Ich verwende Guice 3.0,
hier mal das KSKB:
Die auskommentierten Stellen erzeugen den Fehler. Vor allem die letzten 2 Zeilen Code leuchten mir einfach nicht ein!
Beim Programm soll der Benutzer seinen Namen und Passwort eingeben und da diese erst zur Laufzeit bekannt sind, verwende ich für diese Implementierung AssistedInject.
Ich habe hierfür ein Interface UserFactory mit der Methode
Code:
User create(@Assisted("Username") String username, @Assisted("Password") String password);
Java:
User user = getInjector().getInstance( UserFactory.class ).create( username, password );
Das Problem ist aber, dass ich dauernd Fehlermeldungen kriege. Guice meckert, dass ich keine Variablen übergeben habe. Und wenn ich in die configure-Methode
Code:
bind( User.class ).in( Singleton.class );
Ich werde evtl ein KSKB posten. Weiß jemand aber, wie man das umgehen kann?
Edit: Ich verwende Guice 3.0,
hier mal das KSKB:
Java:
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.FactoryModuleBuilder;
public class KSKB {
@Singleton
public static class User {
public final String name;
@Inject
public User(@Assisted("Username") String username) {
this.name = username;
}
public static interface Factory {
public User create(@Assisted("Username") String username);
}
}
public static void main(String... args) {
Injector injector = Guice.createInjector( new AbstractModule() {
@Override
protected void configure() {
install( new FactoryModuleBuilder().build( User.Factory.class ) );
// bind( User.class );
}
} );
User user = injector.getInstance( User.Factory.class ).create( "Guice" );
System.out.println( user.name );
// user = injector.getInstance( User.class ); // doesn't work - throws Exception!!
// System.out.println( user.name );
}
}
Die auskommentierten Stellen erzeugen den Fehler. Vor allem die letzten 2 Zeilen Code leuchten mir einfach nicht ein!
Zuletzt bearbeitet: