java如何创建非辅助依赖关系?
假设我有一个第三方类,如下所示:
public class MyObject {
@Inject
public MyObject(Foo foo, Bar bar) { ... }
}
现在假设我有这样一个工厂界面:
public interface MyObjectFactory {
public MyObject build(Bar bar);
}
我的想法是希望有一个MyObjectFactory
为固定的Foo
构建一个MyObject
,也就是说,本质上是从外部在Bar
构造函数参数上添加^{MyObjectFactory
始终是可能的:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Provider<Foo> foo;
@Override
public MyObject build(Bar bar) { return new MyObject(foo.get(), bar); }
}
但是假设有一些条件要求我拥有Guice buildMyObject
实例——例如,方法拦截器。这似乎是“注射注射器”的工作:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Injector injector;
@Override
public MyObject build(Bar bar) {
Injector child = injector.createChildInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Bar.class).toInstance(bar);
// Set up method interceptors for MyObject here...
}
});
return child.getInstance(MyObject.class);
}
}
这听起来很邪恶,很简单,所以我想知道是否有其他的实现和/或让Guice生成工厂impl的方法
# 1 楼答案
实际上是的。看看Assisted Inject
包括
辅助注射更新
您必须再添加一个接口:
在模块中,将通用工厂绑定到接口
现在你可以在任何你想要的地方注入
MyObjectFactory