我是Dagger的新手.目前我创建示例项目一些剪辑代码:
MyComponent.java
@PerActivity
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(TutorialActivity activity);
}
Run Code Online (Sandbox Code Playgroud)
MyModule.java
@Module
public class MyModule {
@Provides
Position providePosition() {
return new Position();
}
}
Run Code Online (Sandbox Code Playgroud)
PerActivity.java
@Scope
@Retention(RUNTIME)
public @interface PerActivity {}
Run Code Online (Sandbox Code Playgroud)
TutorialActivity.java
public class TutorialActivity extends AppCompatActivity{}
Run Code Online (Sandbox Code Playgroud)
编译项目时我收到错误:
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>
Run Code Online (Sandbox Code Playgroud)
因此,如果我将TutorialActivity更改为:
public class TutorialActivity extends Activity{}
or even
public class TutorialActivity{} // Without extends
Run Code Online (Sandbox Code Playgroud)
然后它会正常工作.(我可以看到Dagger2生成的类).
请帮忙 !
谢谢.
UPDATE
我的项目结构:
common 模块.app模块.(app模块将使用通用模块作为gradle).在build.gradle(common和app模块)中,我添加了:
apt "com.google.dagger:dagger-compiler:${daggerVersion}"
compile "com.google.dagger:dagger:${daggerVersion}"
Run Code Online (Sandbox Code Playgroud)
在build.gradle中的公共模块:
provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}"
Run Code Online (Sandbox Code Playgroud)
如果我有2个模块,则只会发生错误.(模块app取决于common).如果我将组件/模块移动到模块common- >它工作.但是当我把它移到app模块 - >编译时出错.
感谢@plash 的回答。
在我重新检查这两个模块之后。我发现我只添加了:
provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}"
Run Code Online (Sandbox Code Playgroud)
在模块中common。
添加为两个模块提供后,编译成功。(Dagger 生成的类。)
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |