Я пытаюсь использовать Dagger 2, и во многих примерах я видел такой код:
MyComponent.java
@Singleton
@Component(modules = {SharedPrefModule.class})
public interface MyComponent {
void inject(MainActivity activity);
}
SharedPrefModule.java
@Module
public class SharedPrefModule {
private Context context;
public SharedPrefModule(Context context) {
this.context = context;
}
@Singleton
@Provides
public Context provideContext() {
return context;
}
@Singleton
@Provides
public SharedPreferences provideSharedPreferences(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
}
MainActivity.java
@Inject
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
myComponent = DaggerMyComponent.builder().sharedPrefModule(new SharedPrefModule(this)).build();
myComponent.inject(this);
}
Я сомневаюсь, действительно ли я для инъекций должен поставить это?:
DaggerMyComponent.builder().sharedPrefModule(new SharedPrefModule(this)).build();
И если я хочу ввести в другой класс, нужно ли добавить другой метод в MyComponent
, например, я хочу ввести SharedPreferences
в MainViewModel
Нужно ли поставить void inject(MainViewModel mainViewModel);
тоже?
Если ответ «да», в чем действительно преимущество этого?в чем разница только для применения шаблона синглтона?или для инъекций использовать непосредственно myComponent = new SharedPreferences(this);
?