如何使用Dagger2实现Factory

时间:2015-08-07 08:21:40

标签: java android dependency-injection dagger-2

我试图用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 个答案:

答案 0 :(得分:8)

我有一个有效的解决方案。如果你有更好的方法,请告诉我

@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();
                    }
        };
    }
}
相关问题