在Guice初始化中使用先前注入的绑定

时间:2012-06-20 11:57:10

标签: java guice actor akka

我需要解决奇怪的任务:我有一个由Guice创建的A类:

bind(A.class)

但后来我需要用A类初始化Actor(这是Actor的性质):

actorSystem.actorOf(
  new Props(
    new UntypedActorFactory() {
      public UntypedActor create() {
         /// ????
      }
    })
 );

如何返回先前绑定的actor A的实例?

1 个答案:

答案 0 :(得分:2)

我可能误解了????隐含的问题,但是当你使用Guice时,你通常会试图避免新的很多对象。当您需要Guice管理的新对象时,您只需要提供该类型的提供程序。即使您没有为它编写提供程序,也有一个隐式提供程序,其中Guice要么为它所绑定的作用域重新使用该对象,要么为您提供一个需要注入的对象的新对象。

它可能看起来像:

class WhateverClassThisIs {
  private provider<A> providesA;

  @Inject
  public WhateverClassThisIs(provider<A> providesA) {
    this.providesA = providesA;
  }

  public whateverMethodThisIs() {
    actorSystem.actorOf(
    new Props(
      new UntypedActorFactory() {
        public UntypedActor create() {
           /// ???? translation: I need an object A here.
           A a = providesA.get();
        }
      })
    );
  }
}

如果你可以编辑其他类类型,你可以改为注入它们的构造函数/方法所需的对象,从而消除对new的更多用法。

另一方面,如果您说要获得正确类型的A,则需要执行此actorSystem.actorOf调用,那么您需要实现A的提供程序而不只是绑定它。