问题描述
我正在尝试用Dagger2实现一个工厂,但我不知道怎么做?
在一个简化的例子中:
public class Foo{
public interface Factory{
Foo createNew();
}
private Bar bar;
public Foo(Bar bar){
this.bar= bar;
}
}
我想设置一个提供Foo.Factory实例的方法
@Module
public class TestModule{
@Provides
Bar provideBar(){
return new Bar();
}
@Provides
Foo.Factory provideFooFactory(){
// ??????
}
}
结果应该是(当然从模块中获取Bar实例):
new Foo.Factory(){
@Override
public Foo createNew() {
return new Foo(new Bar());
}
};
实现这一目标的正确方法是什么?
1楼
我有一个有效的解决方案。 如果你有更好的方法,请告诉我
@Module
public class TestModule{
@Provides
Bar provideBar(){
return new Bar();
}
@Provides
Foo provideFoo(Bar bar){
return new Foo(bar);
}
@Provides
Foo.Factory provideFooFactory(final Provider<Foo> fooProvider){
return new Foo.Factory(){
@Override
public Foo createNew() {
return fooProvider.get();
}
};
}
}