当前位置: 代码迷 >> java >> 如何使用Dagger2实现Factory
  详细解决方案

如何使用Dagger2实现Factory

热度:71   发布时间:2023-07-25 19:43:42.0

我正在尝试用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());
      }
};

实现这一目标的正确方法是什么?

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

@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();
                    }
        };
    }
}
  相关解决方案