1

我正在尝试学习 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。

我在这里想念什么?

谢谢卡提克

4

2 回答 2

1

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

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

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

        return injector;
    }

在我的 TheClassThatNeedsMyService 我必须做

@Inject MyService serviceObj;

仅供参考,这是我的服务类的样子

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

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

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

谢谢卡提克

于 2013-08-23T05:36:24.650 回答
0

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

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

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

于 2013-08-26T00:27:20.790 回答