Dagger 2:没有为组件接口生成实现

Dagger 2: No implementation generated for component interface

我创建了一个演示 Android Lib 项目并通过以下步骤使用 dagger 2.0:

  1. 将以下 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

  2. 项目 -> 属性 -> Java 编译器 -> 注释处理(启用注释处理)

  3. Project -> Properties -> Java Compiler -> Annotation Processing - Factory path: 添加了上面提到的所有 jars。

  4. 创建了以下内容类:

    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。