Это кажется очень простым вопросом для Dagger2
пользователей.Я недавно начал изучать его с RetroFit
.Я следовал некоторым учебникам и придумал приведенный ниже код (некоторые из них).
@Singleton
@Component(modules = {AppModule.class, ApiModule.class})
public interface ApiComponent {
void inject(MainActivity context);
}
public class MyApplication extends Application {
private ApiComponent mApiComponent;
@Override
public void onCreate() {
super.onCreate();
mApiComponent = DaggerApiComponent.builder()
.appModule(new AppModule(this))
.apiModule(new ApiModule("https://rect.otp/demos/"))
.build();
}
public ApiComponent getNetComponent() {
return mApiComponent;
}
}
И MainActivity.java
public class MainActivity extends AppCompatActivity {
@Inject
Retrofit retrofit;
ActivityMainBinding mainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
((MyApplication) getApplication()).getNetComponent().inject(this);
ApiCall api = retrofit.create(ApiCall.class);
}
}
Вопросы
1. Когда я изменяю void inject(MainActivity context);
на void inject(Context context);
, я получаю NullPointerException
на retrofit
в MainActivity
. Почему?
При использовании void inject(MainActivity context);
работает нормально.Почему?
Если мне нужно ввести RetroFit
в несколько классов, какой подход должен быть.Создание inject()
для каждого класса не кажется решением.
Я новичок в инъекциях зависимости.Так что я могу иметь некоторое руководство на это.Какой будет правильный подход, чтобы использовать его в нескольких классах.