Dagger2でSubScopingを実行しようとしていました。ただし、このコンパイルエラーを理解することはできません:-> ...MyApplicationModule must be set
これは私のLogInFragment
で発生します。誰かがこのエラーに光を当てようとする場合。本当に嬉しいです。
これはMyApplication Class:です。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MyInjector.initialize(this);
}
}
これはMyInjector Class:
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 Class:
@Component (modules = {MyApplicationModule.class})
public interface MyApplicationComponent {
}
これはMyApplicationModuleクラス
@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;
}
}
これは私がしようとしているところですサブスコープ
これはMyLogInコンポーネントクラス
@Singleton
@Component(modules = {MyApplicationModule.class}, dependencies = {MyApplicationComponent.class})
public interface LogInComponent {
LogInPresenter signInPresenter();
}
ここでCompilation Error
起こる
これはMyLogInActivityFragment
@Override protected void injectDependencies() {
logInComponent = DaggerLogInComponent.builder()
.myApplicationComponent(MyInjector.get())
.build();
}
LogInComponent
は、MyApplicationComponent
を含むMyApplicationModule
に依存します。 LogInComponent
でもこれと同じモジュールを宣言するべきではありません。それを削除すると、コンパイルされます。
また、次のようにコンポーネントインターフェイスに追加して、LogInComponent
からMyApplicationComponent
に必要な依存関係を公開してください。
@Component (modules = {MyApplicationModule.class})
public interface MyApplicationComponent {
Context context();
SharedPreferences sharedPreferences();
// ...
}
別のヒント– MyApplicationComponent
からのすべての依存関係が必要な場合は、 subcomponents について読みたいと思うかもしれません。
エラーは、abstract class
モジュールが原因で発生する可能性があります。モジュールが抽象クラスである場合、Daggerはモジュールを使用できません。