我已经创建了一个演示 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
Project -> Properties -> Java Compiler -> Annotation Processing(启用注解处理)
项目 -> 属性 -> Java 编译器 -> 注释处理 - 工厂路径:添加了上述所有 jar。
创建了以下类:
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)接口(interface)引擎{
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 没有向您显示日志。如果您在“输出” View 中有日志输出,您可能希望将其粘贴到问题中。
具体来说,我认为它在 void inject()
上出错了,这不是 @Component
docs 中描述的格式.这些文档描述了三种类型的方法:
- 返回 Dagger 创建和注入(inject)的可注入(inject)类型的无参数工厂方法,例如
Engine createEngine()
, 或 - 接收在别处创建的实例并应用方法和字段注入(inject)的单参数无效方法,如
void injectEngine(Engine)
或Engine injectEngine(Engine)
. - 将您的组件的绑定(bind)与来自另一个模块的绑定(bind)结合起来的子组件返回方法。
因为你的void inject()
不匹配任何这些格式,Dagger 可能会出错并拒绝创建 DaggerEngineComponent。
关于android - Dagger 2 : No implementation generated for component interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906199/