使用@Singleton注释时,Dagger生成的代码编译失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用@Singleton注释时,Dagger生成的代码编译失败相关的知识,希望对你有一定的参考价值。

我正在使用Dagger - 2.6,我有以下课程。

public class Trigger {

    public static JSONObject triggerLambda(JSONObject jsonObject) {
        DataTransformerComponent daggerDataTransformerComponent =  DaggerDataTransformerComponent.create();
        return daggerDataTransformerComponent.getHandler().handle(jsonObject);

    }

}

数据处理程序类:

public class DataHandler {


    private static final Logger LOGGER = Logger.getLogger(DataHandler.class.getName());


    private A a;


    @Inject
    public DataHandler(A a) {
        this.a = a;
    }

    public JSONObject handle(JSONObject input) {
        LOGGER.info("Json input received - " + input.toString());
        return a.executeTransformation(input);
    }

}

和依赖:

public class A {

    @Inject
    public A() {
    }

    public JSONObject executeTransformation(JSONObject jsonObject) {
        System.out.println("a");
        return null;
    }
}

我的组件类看起来像:

@Component
public interface DataTransformerComponent {

    DataHandler getHandler();
}

当我编译上面的代码时,它运行绝对正常。

现在我想让我的A依赖@Singleton。所以我改变我的依赖类和组件类如下:

@Singleton
@Component
public interface DataTransformerComponent {

    DataHandler getHandler();
}

依赖类:

@Singleton
public class A {

    @Inject
    public A() {
    }

    public JSONObject executeTransformation(JSONObject jsonObject) {
        System.out.println("a");
        return null;
    }
}

但是现在生成的组件显示编译错误:

A_Factory未找到,并且在initialize()方法中失败。

DaggerDataTransformerComponent:

@Generated(
  value = "dagger.internal.codegen.ComponentProcessor",
  comments = "https://google.github.io/dagger"
)
public final class DaggerDataTransformerComponent implements DataTransformerComponent {
  private Provider<A> aProvider;

  private Provider<DataHandler> dataHandlerProvider;

  private DaggerDataTransformerComponent(Builder builder) {
    assert builder != null;
    initialize(builder);
  }

  public static Builder builder() {
    return new Builder();
  }

  public static DataTransformerComponent create() {
    return builder().build();
  }

  @SuppressWarnings("unchecked")
  private void initialize(final Builder builder) {

    this.aProvider = DoubleCheck.provider(A_Factory.create());

    this.dataHandlerProvider = DataHandler_Factory.create(aProvider);
  }

  @Override
  public DataHandler getHandler() {
    return dataHandlerProvider.get();
  }

  public static final class Builder {
    private Builder() {}

    public DataTransformerComponent build() {
      return new DaggerDataTransformerComponent(this);
    }
  }
}

当我使用@Singleton注释时,我无法弄清楚它为什么不创建_factory类。

答案

只需使用常规javascript + node.js,它就简单多了

以上是关于使用@Singleton注释时,Dagger生成的代码编译失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dagger 2.x 注入 Singleton 类

Android Dagger2,Singleton交叉组件

Dagger 2 Activity 上下文/ApplicationContext 模块

markdown Dagger 2:Singleton例如.md

Dagger2 探索记3——两大进阶组件

与 Dagger 一起使用时,Espresso 生成 FileNotFoundException