【问题标题】:Dagger 2: No implementation generated for component interfaceDagger 2:没有为组件接口生成实现
【发布时间】:2015-10-02 11:28:38
【问题描述】:

我已经创建了一个演示 Android Lib 项目并使用了 dagger 2.0,步骤如下:

  1. 将以下 jars 添加到 /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. 项目 -> 属性 -> Java 编译器 -> 注释处理 - 工厂路径:添加了上述所有 jar。

  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 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 不适合我构建组件。

有人可以帮忙吗?

【问题讨论】:

    标签: android annotations android-library dagger-2


    【解决方案1】:

    我猜注释处理器遇到错误,Eclipse 没有向您显示日志。如果您在“输出”视图中有日志输出,您可能需要将其粘贴到问题中。

    具体来说,我认为void inject() 出错了,这不是@Component docs 中描述的格式。这些文档描述了三种类型的方法:

    • 返回 Dagger 创建和注入的可注入类型的无参数工厂方法,例如 Engine createEngine(),或
    • 接收在别处创建的实例并应用方法和字段注入的单参数 void 方法,例如 void injectEngine(Engine)Engine injectEngine(Engine)
    • 返回子组件的方法,将您的组件的绑定与来自其他模块的绑定相结合。

    由于您的void inject() 不匹配任何这些格式,Dagger 可能会出错并拒绝创建 DaggerEngineComponent。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多