/ / Play 2.1 com Guice 3.0 - Acesso não disponível fora das classes Controller - injeção de dependência, playframework-2.0, guice

Play 2.1 with Guice 3.0 - Acesso não disponível fora das classes do Controller - dependency-injection, playframework-2.0, guice

Estou tentando aprender como o guice brinca com o framework 2.1 do jogo. Eu tenho um serviço ao qual preciso acessar fora do pacote de serviços. Coloquei o abaixo no arquivo Global

 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);
}

Dentro da classe controller sou capaz de chegar ao meu objeto fazendo abaixo e tudo parece estar bem

@Inject
MyService serviceObj

Mas em outros lugares fora do controlador, o mesmoO objeto parece ser nulo. Por exemplo, eu tenho um módulo principal que cuida de conversar com o serviço. As classes do controlador distribuem o trabalho para o módulo principal. Eu preciso ser capaz de me apossar desse objeto MyService nas classes principais do módulo.

O que estou perdendo aqui pessoal?

obrigado Karthik

Respostas:

1 para resposta № 1

Eu tinha descoberto uma maneira de fazer isso.

No meu método de configuração, tive que usar este

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

return injector;
}

E no meu TheClassThatNeedsMyService eu tinha que fazer

@Inject MyService serviceObj;

Apenas para referência, é assim que minha classe de serviço se parece

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

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

Agora sou capaz de obter acesso ao meu objeto de serviço onde eu quiser no meu aplicativo. Espero que ajude alguém

obrigado Karthik


0 para resposta № 2

Como alternativa à injeção estática, veja o exemplo de play-guice aqui:

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

O Guice pode ser usado de maneira convencional com o Play.