Должен быть установлен Dagger Module

Пытался добавить Dagger2. Однако я не могу понять эту ошибку компиляции: MainActivityModule must be set, которая возникает в моем MainActivity. Если кто-то попытается пролить свет на эту ошибку. Я был бы очень рад.

Моя основная деятельность

public class MainActivity extends BaseActivity {

@Inject
JsonMethods mJsonMethods;
...
in OnCreate
Weather.getComponent().injectMainActivity(this);

Мой класс погоды

public class Weather extends Application {

private static WeatherComponent sWeatherComponent;

@Override
public void onCreate() {
    super.onCreate();
    sWeatherComponent = DaggerWeatherComponent.builder()
            .contextModule(new ContextModule(this))
            .build();
}

public static WeatherComponent getComponent() {
    return sWeatherComponent;
}
}

WeatherComponent

@Component(modules = MainActivityModule.class)
public interface WeatherComponent {
    void injectMainActivity(MainActivity mainActivity);
}

MainAcitivtyModule

@Module(includes = NetworkModule.class)
public class MainActivityModule {

private final MainActivity mainActivity;

public MainActivityModule(MainActivity mainActivity) {
    this.mainActivity = mainActivity;
}

@Provides
@WeatherApplicationScope
public JsonMethods provideJsonMethods(Retrofit retrofit) {
    return new JsonMethods(mainActivity, retrofit);
}

NetworkModule возврат Retrofit, Gson, OkHttpClient

В этом коде появляется ошибка MainActivityModule must be set:

sWeatherComponent = DaggerWeatherComponent.builder()
                .contextModule(new ContextModule(this))
                .build();
3
0
1 116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны создать экземпляр MainActivityModule, как вы создали экземпляр ContextModule. Ваш MainActivityModule не имеет конструктора по умолчанию, поэтому Dagger не может создать экземпляр MainActivityModule. Итак, создайте экземпляр MainActivityModule и установите его на график Dagger.

    sWeatherComponent = DaggerWeatherComponent.builder()
        .contextModule(new ContextModule(this))
        .mainActivityModule(new MainActivityModule(....))
        .build();

Если модули не имеют конструктора, определенного пользователем, Dagger при необходимости автоматически создаст экземпляр через конструктор по умолчанию.

Большое спасибо. Спаси мой день))

user8940426 22.04.2018 18:29

Добро пожаловать :) :) :)

Abu Yousuf 22.04.2018 18:43

Другие вопросы по теме