2017-01-09 14 views
3

Dagger2でSubScopingを実行しようとしていました。しかし、私はこのコンパイルエラーを理解することができません: - で発生する - >...MyApplicationModule must be set。誰かがこのエラーで何らかの光を投げようとするならば。私は本当にうれしいだろう。Dagger2エラー:モジュールを設定する必要があります

これはMyApplicationをクラスです:MyInjectorクラス

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     MyInjector.initialize(this); 
    } 
} 

これは、次のとおりです。

public enum MyInjector { 
    INSTANCE; 

    MyApplicationComponent myApplicationComponent; 


    private MyInjector() { 
    } 

    public static void initialize(MyApplication myApplication) { 

     MyApplicationComponent myApplicationComponent = DaggerMyApplicationComponent.builder() 
       .myApplicationModule(new MyApplicationModule(myApplication)) 
       .build(); 
     INSTANCE.myApplicationComponent = myApplicationComponent; 
    } 

    public static MyApplicationComponent get() { 
     return INSTANCE.myApplicationComponent; 
    } 

} 

これはMyApplicationComponentクラスです:

@Component (modules = {MyApplicationModule.class}) 
public interface MyApplicationComponent { 

} 

これはこれはCompilation Error

起こる場所です MyLogInコンポーネントクラス

@Singleton 
@Component(modules = {MyApplicationModule.class}, dependencies = {MyApplicationComponent.class}) 
public interface LogInComponent { 
    LogInPresenter signInPresenter(); 
} 

ここで私はサブスコープにしようとしています

これは

@Module 
public class MyApplicationModule { 

    private final MyApplication myApplication; 

    public MyApplicationModule(MyApplication myApplication) { 
     this.myApplication = myApplication; 
    } 

    @Singleton 
    @Provides 
    SharedPreferences providesSharedPreferences(Context context) { 
     return context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE); 
    } 

    @Singleton 
    @Provides 
    public Context providesMyApplicationContext() { 
     return this.myApplication.getApplicationContext(); 
    } 

    @Singleton 
    @Provides 
    public LocationManager providesLocationService(Context context) { 
     return (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    } 

    @Singleton 
    @Provides 
    public MyDatabaseManager providesMyDatabaseManager(Context context) { 
     return MyDatabaseManager.getInstance(context); 
    } 

    @Singleton 
    @Provides 
    public AccountSystemModel providesAccountSystemModel(Context context) { 
     return MyDatabaseManager.getInstance(context); 
    } 

    @Singleton 
    @Provides 
    public MyApplication providesMyApplication(){ 
     return this.myApplication; 
    } 

} 

MyApplicationModuleクラスです

このMyLogInActivityFragment

@Override protected void injectDependencies() { 
    logInComponent = DaggerLogInComponent.builder() 
        .myApplicationComponent(MyInjector.get()) 
        .build(); 
} 

答えて

4

あなたLogInComponentMyApplicationModuleを含むMyApplicationComponentに依存しています。同じモジュールをLogInComponentでも宣言するべきではありません。それを削除すると、コンパイルされます。また


、あなたはそのようなコンポーネント・インタフェースに追加することでMyApplicationComponentからLogInComponentに必要な依存関係を公開していることを確認します

@Component (modules = {MyApplicationModule.class}) 
public interface MyApplicationComponent { 
    Context context(); 
    SharedPreferences sharedPreferences(); 
    // ... 
} 

もう一つのヒントを - あなたからすべての依存関係が必要な場合MyApplicationComponentについては、subcomponentsについてお読みください。

16

私の場合、エラーはabstract classモジュールによって発生しています。 Daggerが抽象である場合、モジュールは使用できません。

関連する問題