2017-09-30 6 views
0

Daggerの新機能で、Dagger 2.11の実装をAndroidアプリケーションで学習しています。私はいくつかのチュートリアルに続き、サンプルプロジェクトを作成しました。Dagger 2.11 [dagger.android.AndroidInjector.inject(T)]依存サイクルが見つかりました

Error:(19, 8) error: [dagger.android.AndroidInjector.inject(T)] Found a dependency cycle: 
com.saharan.daggerart.DaggerArtApplication is injected at 
com.saharan.daggerart.AppModule.provideApplicationContext(application) 
com.saharan.daggerart.DaggerArtApplication is injected at 
com.saharan.daggerart.AppModule.provideSharedPreferences(application) 
android.content.SharedPreferences is injected at 
com.saharan.daggerart.MainActivity.preferences 
com.saharan.daggerart.MainActivity is injected at 
dagger.android.AndroidInjector.inject(arg0) 

AppComponent:

@Singleton 
@Component(modules = {AndroidInjectionModule.class, AppModule.class, ActivityModule.class}) 
public interface AppComponent { 
    @Component.Builder 
    interface Builder { 
     @BindsInstance 
     Builder application(Application application); 
     AppComponent build(); 
    } 
    void inject(DaggerArtApplication application); 
} 

AppModule:

@Singleton 
@Module(subcomponents = {MainActivityComponent.class}) 
public class AppModule { 

    @Provides 
    @Singleton 
    DaggerArtApplication provideApplicationContext(DaggerArtApplication application) { 
     return application; 
    } 

    @Provides 
    @Singleton 
    SharedPreferences provideSharedPreferences(DaggerArtApplication application) { 
     return application.getSharedPreferences(Constants.PrefKeys.PREF_NAME, Context.MODE_PRIVATE); 
    } 
} 

ActivityModule:

@Module 
public abstract class ActivityModule { 
    @Binds 
    @IntoMap 
    @ActivityKey(MainActivity.class) 
    abstract AndroidInjector.Factory<? extends Activity> bindMainActivity(MainActivityComponent.Builder builder); 
} 

MainActivityComponent:

しかし、私はこのエラーを取得しています
@Subcomponent(modules = MainActivityModule.class) 
public interface MainActivityComponent extends AndroidInjector<MainActivity> { 
    @Subcomponent.Builder 
    abstract class Builder extends AndroidInjector.Builder<MainActivity> { 
    } 
} 

MainActivityModule:

@Module 
public class MainActivityModule { 

    @Provides 
    String provideUserName() { 
     return "Mr. Bond"; 
    } 
} 

そして今MainActivity:

public class MainActivity extends AppCompatActivity { 

    @Inject String username; 
    @Inject 
    SharedPreferences preferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidInjection.inject(this); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

私が間違って何をしているのですか? 助けてください!

答えて

3

タイプミスのようです。

DaggerArtApplication provideApplicationContext(DaggerArtApplication application) 

これはダガーはDaggerArtApplicationを提供するために、DaggerArtApplicationが必要であることを意味します。私はあなたがApplicationDaggerArtApplicationを結合する

DaggerArtApplication provideApplicationContext(Application application) 

を言いたかったと思います。

関連する問題