【发布时间】:2017-06-19 17:32:08
【问题描述】:
我正在测试 dagger 的新功能:Android 模块。当我使用@ContributesAndroidInjector 时,我无法编译代码
我总是收到以下错误:
Error:(12, 8) error: dagger.internal.codegen.ComponentProcessor 无法处理此接口,因为并非所有依赖项都可以解决。使用生成的代码检查编译错误或循环依赖。
我尝试实现我的组件,如 here,但仍然出现错误。
这是最小的例子:
@PerApplication
@Component(modules = {AndroidInjectionModule.class, LoginBindingModule.class})
public interface ApplicationComponent {
void inject(ExampleApplication application);
}
@Module
public abstract class LoginBindingModule {
@ContributesAndroidInjector
abstract LoginActivity contributeYourActivityInjector();
}
public class LoginActivity extends Activity {
@Inject
LoginPresenter loginPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
}
}
public class LoginPresenter {
@Inject
public LoginPresenter() {
}
}
如果我从 ApplicationComponent 中删除 LoginBindingModule 应用程序将被构建,但会因运行时异常而失败:
java.lang.IllegalArgumentException: 没有注入器工厂绑定到 Class
项目设置:
gradle 3.3
buildToolsVersion "25.0.2"
dagger 2.11
【问题讨论】:
-
请看一下这个示例:material.uplabs.com/posts/daggerandroidinjector 我遇到了和你一样的问题,但是我在 gradle 中缺少 annotationProcessor "com.google.dagger:dagger-android-processor:2.11"文件。
-
您没有在代码示例中提供您的
ExampleApplication。如果你想使用AndroidInjection.inject(Activity),你必须让你的应用程序实现HasActivityInjector。我试过你的代码,它似乎工作正常。如果您继续看到错误,那么它不是来自您发布的代码。如果您需要更多帮助,请将整个项目发布到某个地方。另外,您是否尝试过清理/重建您的项目。
标签: android dependency-injection dagger-2