2017-03-21 9 views
4

dagger.androidパッケージで新しくリリースされたDagger 2.10で小さなAndroidプロジェクトを試しました。 のみMainApplicationクラスはダガーで注入されるべきで、他には何もまだ依存関係を持っていません:Dagger 2 Androidアプリケーションコンポーネントがありませんinjectメソッド

build.gradle

dependencies { 
    ... 
    // Dagger 
    compile 'com.google.dagger:dagger:2.10' 
    compile 'com.google.dagger:dagger-android:2.10' 
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10' 

    // Fix for incompatible library versions when adding dagger-android and having espresso-core:2.2.2 in tests 
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1' 
} 

をMainApplication.java

public class MainApplication extends Application implements HasDispatchingActivityInjector { 

    @Inject DispatchingAndroidInjector<Activity> dispatchingAndroidInjector; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     DaggerMainApplicationComponent.create(); 
    // DaggerMainApplicationComponent.create().inject(this); does not work - no inject(...) method! 
    } 

    @Override 
    public DispatchingAndroidInjector<Activity> activityInjector() { 
     return dispatchingAndroidInjector; 
    } 
} 

MainApplicationComponent.java

@Component(modules = AndroidInjectionModule.class) 
public interface MainApplicationComponent {} 

自動生成のDaggerMainApplica tionComponent.java:

public final class DaggerMainApplicationComponent implements MainApplicationComponent { 
    private DaggerMainApplicationComponent(Builder builder) { 
    assert builder != null; 
    } 

    public static Builder builder() { 
    return new Builder(); 
    } 

    public static MainApplicationComponent create() { 
    return new Builder().build(); 
    } 

    public static final class Builder { 
    private Builder() {} 

    public MainApplicationComponent build() { 
     return new DaggerMainApplicationComponent(this); 
    } 
    } 
} 

私はダガーに新しいですし、資源がたくさんありますが、多くは時代遅れダガーライブラリでDIを記述しています。私の実装で何が間違っていますか? 私はまた、MainApplication_MembersInjectorという名前の自動生成されたクラスを見つけました...これは自分で使用する必要がありますか?

答えて

0
@Component(modules = AndroidInjectionModule.class) 
public interface MainApplicationComponent { 
    void inject(DispatchingAndroidInjector dispatchingAndroidInjector); 

} 
+3

ほとんどの場合、ありがとうございます。私を正しい軌道に乗せてください。これはうまくいきました:void inject(MainApplicationアプリケーション);あなたが掲示したパラメタの代わりに。 – Paco1

+0

ええ、あなたはクラスを使用しなければなりません、注入メソッドはインターフェイスでは動作しません – ootinii

+0

このコードは質問に答えるかもしれませんが、追加の[context](https://meta.stackexchange.com/q/114762)_how_問題を解決すれば答えの長期的価値が向上するだろう。また、この答えが他のものよりも適切である理由についても言及していません。 –

関連する問題