android - Dagger 2 : No implementation generated for component interface

标签 android annotations android-library dagger-2

我已经创建了一个演示 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. Project -> Properties -> Java Compiler -> Annotation Processing(启用注解处理)

  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)接口(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/

相关文章:

android - 在 android studio 中将模块用作 jar

android - Android库中的SQLite数据库,它会在应用程序之间共享吗?

android - 如何在不重新启动 Activity 的情况下切换主题(夜间模式)?

android - 在 Android Studio 中设置 JNA

Android 扩展 Adapter 与扩展 BaseAdapter

java - 如何从 Robotium 检查我的 png 是否出现在屏幕上?

java - 获取请求仅适用于尾部斜杠(spring REST 注释)

java - Spring 中 @Secured 与 @RolesAllowed 的区别?以及基于角色的安全性的概念?

Java 中 C# XmlSerializer 的 XmlIninclude 等效项

android - 库不生成 jar 文件