必须设置匕首模块

时间:2018-04-22 15:32:08

标签: android dagger-2

我试图添加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返回RetrofitGsonOkHttpClient

此代码中出现错误MainActivityModule must be set

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

1 个答案:

答案 0 :(得分:5)

您必须像创建MainActivityModule实例一样创建ContextModule实例。您的MainActivityModule没有任何默认构造函数,因此Dagger无法创建MainActivityModule的实例。因此,创建一个MainActivityModule实例并将其设置为Dagger图表。

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

如果模块没有任何用户定义的构造函数,那么Dagger将在需要时通过默认构造函数自动创建实例。