使用@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 Activity 上下文/ApplicationContext 模块