如何在guice中将预构建的实例传递给提供者?

时间:2017-02-07 00:30:41

标签: guice provider

我理解如果我们需要告诉guice我们需要一个绑定到类型的特定实例,我们使用提供者接口a来返回一个新构造的对象......所以提供者就像工厂一样。

在我看到的所有例子中,证明者根据编译时的一些信息确定了返回的内容。

如何向提供程序传递一个由我控制之外的其他方法创建的对象?

- 编辑:以下修改Olivier的第一个解决方案是否可接受的使用模式?

public class FrameworkModule extends AbstractModule {

  private static instance; 
  public FrameworkModule(FrameworkImplementation instanceCreatedbyFramework) {
     instance=instanceCreatedbyFramework;
  }

  protected void configure() {}

  @Provides
  @Singleton
  FrameworkInterface provideFrameworkInterface() { //this method does not have information to create and in initialize instance. The Framework get initialized first and already creates the instance object. I have the ability to construct guice bindings module after framework is initialized
    return instance;
  }
}

1 个答案:

答案 0 :(得分:3)

有几种方法可以做到。

使用提供方法

public class FrameworkModule extends AbstractModule {
  protected void configure() {}

  @Provides
  @Singleton
  FrameworkInterface provideFrameworkInterface() {
    FrameworkImplementation instance = Framework.newInstance();
    instance.initialize();
    return instance;
  }
}

使用标准声明

public class FrameworkModule extends AbstractModule {
  protected void configure() {
    FrameworkImplementation instance = Framework.newInstance();
    instance.initialize();
    bind(FrameworkInterface.class).toInstance(instance);
  }
}

使用提供者:

public class FrameworkModule extends AbstractModule {
  protected void configure() {
    FrameworkImplementation instance = Framework.newInstance();
    Provider<FrameworkInterface> provider = () -> instance;
    bind(FrameworkInterface.class).toProvider(provider);
  }
}  

问题是你的问题可能过于模糊,如果这个答案没有帮助,请改进你的问题,以便我可以编辑这个答案。