Pas de mise en œuvre a été lié - Java Guice
Novice ici, essayez d'utiliser un mannequin Java Facebook app qui utilise Guice à injecter une base de données de la dépendance dans le Facebook de l'usine, mais continuer à avoir Guice d'erreur me disant:
### Pas de mise en œuvre pour com.exemple.le stockage.Db annotée avec @com.exemple.le stockage.les annotations.SystemDb() a été tenu lors de la localisation de com.exemple.le stockage.Db annotée avec @com.exemple.le stockage.les annotations.SystemDb() pour le paramètre 0 com.exemple.facebook.client.des exceptions.FacebookExceptionHandlerDb au com.exemple.facebook.client.guice.FacebookClientModule.configurer
### Ne pouvait pas trouver un constructeur dans com.exemple.facebook.statsd.StatsdClient. Les Classes doivent avoir un (et un seul) constructeur annotée avec @Inject ou un zéro argument du constructeur qui n'est pas privé. au com.example.facebook.statsd.StatsdClient.class lors de la localisation de com.exemple.facebook.statsd.StatsdClient pour le paramètre 1 au com.exemple.facebook.client.des exceptions.FacebookExceptionHandlerDb. com.exemple.facebook.client.guice.FacebookClientModule.configurer
Code pour app:
app.java
package com.example.facebook;
import com.google.inject.Guice;
import com.restfb.Connection;
import com.restfb.types.Post;
import com.example.facebook.client.FacebookClientFactory;
import com.example.facebook.client.RobustFacebookClient;
import com.example.facebook.client.guice.FacebookClientModule;
import com.example.facebook.statsd.StatsdClient;
public class App {
public static void main ( String[] args ) {
final FacebookClientFactory facebookClientFactory =
Guice.createInjector(new FacebookClientModule()).getInstance(FacebookClientFactory.class);
//error from line above
final RobustFacebookClient robustFacebookClient =
facebookClientFactory.create("accessToken");
//more ...
}
L'erreur qui en résulte points me FacebookClientModule
de liaison:
FacebookClientModule.java
public class FacebookClientModule extends AbstractModule {
bind(FacebookExceptionHandler.class).to(FacebookExceptionHandlerDb.class);
//error resulting from the failed binding on the FacebookExceptionHandlerDB class
install(new FactoryModuleBuilder()
.implement(FacebookClient.class, RobustFacebookClient.class)
.build(FacebookClientFactory.class));
}
}
Où à l'intérieur de la FacebookExceptionHandleDB
classe, le constructeur a l'injection:
FacebookExceptionHandlerDB.java
public class FacebookExceptionHandlerDb implements FacebookExceptionHandler {
//list of class String variables ...
private final FacebookErrorParser parser;
private final Db db;
private StatsdClient statsd;
@Inject
public FacebookExceptionHandlerDb(@SystemDb Db db, StatsdClient statsd, FacebookErrorParser parser) {
this.db = db;
this.statsd = statsd;
this.parser = parser;
}
}
De ce que je peux lueur, l'injection de dépendance pour les paramètres zéro et un, db
et statsD
respectivement, est un échec. Quelqu'un pourrait-il point où ou quoi dans le code de l'application est manquant?
OriginalL'auteur Lorena Nicole | 2014-07-15
Vous devez vous connecter pour publier un commentaire.
À première vue, il semble que la disparition de votre les liaisons pour la Db annoté de la dépendance et de la StatsdClient.
Vous aurez besoin de fournir le manque de liaisons pour votre module comme
Guice est en mesure d'injecter automatiquement de la Classe de Béton avec un public sans argument du constructeur ou d'un constructeur avec @Inject sans aucune liaison définies dans votre module, mais quand il s'agit d'Interfaces, vous devez définir les liaisons nécessaires.
Ici Db.class et StatsdClient.class sont des interfaces qui vous avez besoin de se lier à la mise en œuvre spécifique.
J'ai passé des heures à essayer de la comprendre la question. Cela m'a aidé à résoudre le problème ! Merci une tonne 🙂
Je suis content que cela pourrait vous aider 🙂
OriginalL'auteur Miguel Lavigne
Pas la source du problème dans ce cas particulier, mais j'ai couru à travers cette question quand j'ai eu ma mise en œuvre et de l'interface des classes à l'envers:
:
OriginalL'auteur Nate Vaughan