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生成的)
请帮忙!
谢谢。
更新
我的项目结构:
common
模块。
app
模块。 (应用程序模块将使用 gradle 中依赖的通用模块)。
在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'
我是 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生成的)
请帮忙!
谢谢。
更新
我的项目结构:
common
模块。app
模块。 (应用程序模块将使用 gradle 中依赖的通用模块)。
在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'