/ / Gioca 2.1 con Guice 3.0 - Accesso non disponibile al di fuori delle classi Controller - dependency-injection, playframework-2.0, guice

Gioca 2.1 con Guice 3.0 - Accesso non disponibile al di fuori delle classi del controller - dipendenza dall'iniezione, playframework-2.0, guice

Sto cercando di imparare a giocare a guice con Play 2.1 framework. Ho un servizio a cui ho bisogno di accedere al di fuori del pacchetto di servizi. Ho inserito quanto segue nel file globale

 protected Injector configure() {
injector =  Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(MyService.class).to(MyServiceImpl.class).in(Singleton.class);
}
});

return injector;
}

@Override
public <A> A getControllerInstance(Class<A> clazz) throws Exception {
return injector.getInstance(clazz);
}

All'interno della classe controller sono in grado di raggiungere il mio oggetto facendo di seguito e tutto sembra andare bene

@Inject
MyService serviceObj

Ma altrove al di fuori del controller lo stessol'oggetto sembra essere nullo. Ad esempio, ho un modulo principale che si occupa di parlare con il servizio. Le classi del controller distribuiscono il lavoro al modulo principale. Devo essere in grado di ottenere questo oggetto MyService nelle classi del modulo principale.

Cosa mi manca qui ragazzi?

Grazie Karthik

risposte:

1 per risposta № 1

Avevo trovato una via d'uscita per farlo.

Nel mio metodo di configurazione ho dovuto usare questo

  protected Injector configure() {
injector =  Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
requestStaticInjection(TheClassThatNeedsMyService.class);
}
});

return injector;
}

E nel mio TheClassThatNeedsMyService dovevo solo fare

@Inject MyService serviceObj;

Solo per riferimento, ecco come appare la mia classe di servizio

@ImplementedBy(MyServiceImpl.class)
public interface MyService{
...
}

@Singleton
public class MyServiceImpl implements MyService{
...
}

Ora sono in grado di accedere al mio oggetto di servizio ovunque io voglia nella mia applicazione. Spero che aiuti qualcuno

Grazie Karthik


0 per risposta № 2

In alternativa all'iniezione statica, vedi l'esempio play-guice qui:

http://typesafe.com/activator/template/play-guice

Guice può essere usato in modo convenzionale con Play.