Dependency injection 使用Guice 3.0播放2.1-在控制器类之外无法访问

Dependency injection 使用Guice 3.0播放2.1-在控制器类之外无法访问,dependency-injection,playframework-2.0,guice,Dependency Injection,Playframework 2.0,Guice,我试图学习guice如何使用Play2.1框架。我有一项服务,我需要在服务包之外访问该服务。我已将下面的文件放在全局文件中 protected Injector configure() { injector = Guice.createInjector(new AbstractModule() { @Override protected void configure() { bind(MyServic

我试图学习guice如何使用Play2.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);
    }
但在控制器之外的其他地方,同一对象似乎为空。例如,我有一个核心模块,负责与服务对话。控制器类将作业分发给核心模块。我需要能够在核心模块类中获得MyService obj

伙计们,我错过了什么

谢谢
Karthik

我已经想出了一个办法来做到这一点

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

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

        return injector;
    }
在我需要服务的课堂上,我只能做

@Inject MyService serviceObj;
仅供参考,这是我的服务类的外观

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

@Singleton
public class MyServiceImpl implements MyService{
...
}
现在,我可以在我的应用程序中随时访问我的服务对象。希望它能帮助别人

谢谢
Karthik

我已经想出了一个办法来做到这一点

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

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

        return injector;
    }
在我需要服务的课堂上,我只能做

@Inject MyService serviceObj;
仅供参考,这是我的服务类的外观

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

@Singleton
public class MyServiceImpl implements MyService{
...
}
现在,我可以在我的应用程序中随时访问我的服务对象。希望它能帮助别人

谢谢
Karthik作为静态注入的替代方案,请参见此处的play guice示例:


Guice可以以传统方式与Play一起使用。

作为静态注入的替代方案,请参见此处的Play Guice示例:


Guice可以在Play中以常规方式使用。

这在Play 2.4中似乎不再有效。你知道这个功能出了什么问题吗?我一直在尝试让依赖注入在2.4.x中的控制器之外工作。在游戏2.4中,这似乎不再起作用。你知道这个功能出了什么问题吗?我一直在尝试让依赖注入在2.4.x中的控制器之外工作