2017-06-19 61 views
3

我正在测试Dagger的新功能:Android模块。而且我不能够当我使用@ContributesAndroidInjector 我总是收到以下错误编译代码:Dagger @ContributesAndroidInjector ComponentProcessor无法处理此接口

错误:(12,8)错误: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异常:没有工厂喷油器绑定对于类

项目设置:

gradle 3.3 
buildToolsVersion "25.0.2" 
dagger 2.11 
+1

请看看这个例子: https://material.uplabs.com/posts/daggerandroidinjector 我有同样的问题,因为你,但我错过了 annotationProcessor“com.google.dagger:dagger- android-processor:2.11“ ”在gradle文件中。 – exkoria

+1

您没有在代码示例中提供'ExampleApplication'。如果你想使用'AndroidInjection.inject(Activity)',你必须让你的应用程序实现'HasActivityInjector'。我试过你的代码,它似乎工作正常。如果您继续看到错误,那么它不是来自您发布的代码。如果您需要更多帮助,请将整个项目发布到某处。另外,你有没有尝试清理/重建你的项目。 –

回答

13

向您的gradle文件添加annotationProcessor'com.google.dagger:dagger-android-processor:2.11'将解决您的问题。