Это действительно лучшая форма для инъекций с помощью кинжала 2?или почему кинжал хороший вариант? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь использовать 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);?

...