如何将预构建的实例传递给 guice 中的提供者?
How do I pass a pre-constructed instance to a provider in guice?
我明白如果我们需要告诉 guice 我们需要一个特定的实例绑定到一个类型,我们使用提供者接口 a 到 return 一个新构造的对象...所以提供者就像一个工厂.
在我看到的所有示例中,供应商本身根据编译时的一些信息计算出要 return 的内容。
如何向提供者传递一个由我无法控制的其他方式创建的对象?
-- 编辑: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;
}
}
有几种方法可以做到这一点。
使用提供方法
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);
}
}
问题是你的问题可能太模糊了,如果这个答案没有帮助,请完善你的问题,以便我可以编辑这个答案。
我明白如果我们需要告诉 guice 我们需要一个特定的实例绑定到一个类型,我们使用提供者接口 a 到 return 一个新构造的对象...所以提供者就像一个工厂.
在我看到的所有示例中,供应商本身根据编译时的一些信息计算出要 return 的内容。
如何向提供者传递一个由我无法控制的其他方式创建的对象?
-- 编辑: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;
}
}
有几种方法可以做到这一点。
使用提供方法
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);
}
}
问题是你的问题可能太模糊了,如果这个答案没有帮助,请完善你的问题,以便我可以编辑这个答案。