2017-06-19 87 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'將解決您的問題。