Dagger 2 在 AppCompatActivity 中注入错误

Dagger 2 inject error in AppCompatActivity

我是 Dagger 的新手。 目前我创建示例项目一些片段代码:

MyComponent.java

@PerActivity
@Component(modules = MyModule.class)
public interface MyComponent {
    void inject(TutorialActivity activity);
}

MyModule.java

@Module
public class MyModule {
    @Provides
    Position providePosition() {
        return new Position();
    }
}

PerActivity.java

@Scope
@Retention(RUNTIME)
public @interface PerActivity {}

TutorialActivity.java

public class TutorialActivity extends AppCompatActivity{}

编译项目时出现错误:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.IllegalArgumentException: expected one element but was: <android.support.v4.app.FragmentActivity, android.support.v4.app.TaskStackBuilder.SupportParentable>

因此,如果我将 TutorialActivity 更改为:

public class TutorialActivity extends Activity{}

or even

public class TutorialActivity{} // Without extends

然后就可以正常工作了(我可以看到class是Dagger2生成的)

请帮忙!

谢谢。

更新

我的项目结构:

在build.gradle(公共模块和应用模块)中我添加了:

apt "com.google.dagger:dagger-compiler:${daggerVersion}"
compile "com.google.dagger:dagger:${daggerVersion}"

在 build.gradle 公共模块中:

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 

只有当我有 2 个模块时才会出现错误。 (模块 app 依赖于 common)。 如果我将我的 Component/Module 移动到模块 common -> 它工作。 但是当我将它移动到 app 模块时 -> 编译时出错。

感谢@plash 的回答。

在我重新检查两个模块之后。 我发现我只添加了:

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 

common 模块中。

在我添加为两个模块提供后编译成功。(生成匕首class。)

我不确定你的问题是 Dagger 的问题,因为我没有看到你在 Android 组件中请求任何依赖项。

尽管如此,您需要在 build.gradle 中使用依赖注入注解。

 provided 'javax.annotation:jsr250-api:1.0'