我理解如果我们需要告诉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;
}
}
答案 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);
}
}
问题是你的问题可能过于模糊,如果这个答案没有帮助,请改进你的问题,以便我可以编辑这个答案。