java - 如何使用 Dagger2 实现工厂

标签 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());
      }
};

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

最佳答案

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

@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();
                    }
        };
    }
}

关于java - 如何使用 Dagger2 实现工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872918/

相关文章:

android - apk 没有 INTERNET 权限。 Selendroid 需要互联网许可才能继续

java - 在 Android Studio 中查找准确的日期时间

unit-testing - 如果我使用 Mockito,我什至需要 Guice 吗?

javascript - 配置一个从单元测试中的延迟返回 promise 的 stub 工厂?

android - 当无法解析具有 "downloads"权限的内容提供程序时,PackageInstaller 崩溃

iOS Typhoon DI 框架替代 objective-c 中的单例

java - 无法在具有 lambda 字段的类的构造函数中使用 `return`

java - Azure RBAC 与 Power shell 相比缺少任何权限吗?

java - 有没有办法静态分析plugin.xml的引用

java - 使用 Guice 按类型和注释检索单例