Dagger 2:没有为组件接口生成实现
Dagger 2: No implementation generated for component interface
我创建了一个演示 Android Lib 项目并通过以下步骤使用 dagger 2.0:
将以下 jar 添加到 /libs 文件夹:
dagger-2.0.jar
dagger-compiler-2.0.jar
dagger-producers-2.0-beta.jar
guava-18.0.jar
javawriter-2.5.1.jar
javax.annotation-api-1.2.jar
javax.inject-1.jar
项目 -> 属性 -> Java 编译器 -> 注释处理(启用注释处理)
Project -> Properties -> Java Compiler -> Annotation Processing - Factory path: 添加了上面提到的所有 jars。
创建了以下内容类:
public class Car {
private Engine engine;
@Inject
public Car(Engine engine) {
this.engine = engine;
}
public String carDetails(){
String engineName = this.engine.getName();
int engineNumber = this.engine.getNumber();
return "This car has the following details: \n" + engineName + "----" + engineNumber;
}
}
public 接口引擎 {
public String getName();
public int getNumber();
}
public class Toyota implements Engine{
@Override
public String getName() {
return "This is toyota engine";
}
@Override
public int getNumber() {
return 1234567890;
}
}
@Component(modules = EngineModule.class)
public interface EngineComponent {
void inject();
}
@Module
public class EngineModule {
public EngineModule(DemoApplication demoApplication) {
}
@Provides
Engine provideEngine(){
return new Toyota();
}
}
但是在/.apt-generated
文件夹里面只有两个文件:
Car_Factory.java EngineModule_ProvideEngineFactory.java
DaggerEngineComponent.java
不适合我构建组件。
有人可以帮忙吗?
我猜注解处理器遇到错误,Eclipse 没有向您显示日志。如果您在“输出”视图中有日志输出,您可能希望将其粘贴到问题中。
具体来说,我认为它在 void inject()
上出错,这不是 @Component
docs 中描述的格式。这些文档描述了三种类型的方法:
- return 可注入类型 Dagger 创建和注入的无参数工厂方法,如
Engine createEngine()
或
- 接收在别处创建的实例并应用方法和字段注入的单参数无效方法,如
void injectEngine(Engine)
或 Engine injectEngine(Engine)
。
- 子组件-returning 方法将您的组件的绑定与来自另一个模块的绑定结合起来。
因为您的 void inject()
不匹配任何这些格式,Dagger 可能会出错并拒绝创建 DaggerEngineComponent。
我创建了一个演示 Android Lib 项目并通过以下步骤使用 dagger 2.0:
将以下 jar 添加到 /libs 文件夹:
dagger-2.0.jar
dagger-compiler-2.0.jar
dagger-producers-2.0-beta.jar
guava-18.0.jar
javawriter-2.5.1.jar
javax.annotation-api-1.2.jar
javax.inject-1.jar
项目 -> 属性 -> Java 编译器 -> 注释处理(启用注释处理)
Project -> Properties -> Java Compiler -> Annotation Processing - Factory path: 添加了上面提到的所有 jars。
创建了以下内容类:
public class Car { private Engine engine; @Inject public Car(Engine engine) { this.engine = engine; } public String carDetails(){ String engineName = this.engine.getName(); int engineNumber = this.engine.getNumber(); return "This car has the following details: \n" + engineName + "----" + engineNumber; } }
public 接口引擎 {
public String getName(); public int getNumber(); } public class Toyota implements Engine{ @Override public String getName() { return "This is toyota engine"; } @Override public int getNumber() { return 1234567890; } } @Component(modules = EngineModule.class) public interface EngineComponent { void inject(); } @Module public class EngineModule { public EngineModule(DemoApplication demoApplication) { } @Provides Engine provideEngine(){ return new Toyota(); } }
但是在/.apt-generated
文件夹里面只有两个文件:
Car_Factory.java EngineModule_ProvideEngineFactory.java
DaggerEngineComponent.java
不适合我构建组件。
有人可以帮忙吗?
我猜注解处理器遇到错误,Eclipse 没有向您显示日志。如果您在“输出”视图中有日志输出,您可能希望将其粘贴到问题中。
具体来说,我认为它在 void inject()
上出错,这不是 @Component
docs 中描述的格式。这些文档描述了三种类型的方法:
- return 可注入类型 Dagger 创建和注入的无参数工厂方法,如
Engine createEngine()
或 - 接收在别处创建的实例并应用方法和字段注入的单参数无效方法,如
void injectEngine(Engine)
或Engine injectEngine(Engine)
。 - 子组件-returning 方法将您的组件的绑定与来自另一个模块的绑定结合起来。
因为您的 void inject()
不匹配任何这些格式,Dagger 可能会出错并拒绝创建 DaggerEngineComponent。