Dagger 2在AppCompatActivity

时间:2016-02-16 05:20:49

标签: android dagger-2

我是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

然后它会正常工作。(我可以看到Dagger2生成的类)。

请帮忙!

感谢。

更新

我的项目结构:

  • common模块。
  • app模块。 (app模块将使用通用模块作为gradle)。

在build.gradle(common和app module)中,我添加了:

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

在common.gradle的公共模块中:

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

如果我有2个模块,则只会出现错误。 (模块app取决于common)。 如果我将组件/模块移动到模块common - &gt;这行得通。 但当我把它移到app模块 - &gt;编译时出错。

2 个答案:

答案 0 :(得分:2)

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

尽管如此,您需要在build.gradle中使用此方法来使用depdendency injection annotations。

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

答案 1 :(得分:0)

感谢@plash的回答。

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

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 
common模块中

在我添加了两个模块后,然后编译成功。(Dagger生成类。)