使用Guice 3.0播放2.1 - 在Controller类之外无法访问

时间:2013-08-22 14:29:25

标签: dependency-injection playframework-2.0 guice

我试图了解如何玩Play 2.1框架。我有一个服务,我需要在服务包之外访问。我已将下面的内容放在全局文件

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

在控制器类中,我可以通过以下方式访问我的对象,一切似乎都很好

@Inject
MyService serviceObj  

但是在控制器外的其他地方,同一个对象似乎是空的。例如,我有一个核心模块,负责与服务交谈。控制器类将作业分发给核心模块。我需要能够在核心模块类中掌握这个MyService obj。

我在这里想念的是什么?

由于 KARTHIK

2 个答案:

答案 0 :(得分:1)

我已经找到了解决这个问题的方法。

在我的配置方法中,我必须使用此

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

        return injector;
    }

在我不得不做的TheClassThatNeedsMyService中

@Inject MyService serviceObj;

仅供参考,这就是我的Service类的样子

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

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

现在我可以在我的应用程序中随时访问我的服务对象。希望它可以帮助某人

由于 KARTHIK

答案 1 :(得分:0)

作为静态注入的替代方法,请参阅此处的play-guice示例:

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

Guice可以以Play的常规方式使用。