Как я могу предоставить и внедрить DividerItemDecoration в Dependency Injection и должен ли я внедрять все? - PullRequest
1 голос
/ 18 марта 2019

Я верю, что мне нужно все впрыснуть.(Таким образом, мы также можем обсудить это) Я использовал recycleview и добавил dividerItemDecoration или LinearLayoutManager

, поэтому в моем ActivityModule.java

public class ActivityModule {

    private AppCompatActivity mActivity;

    public ActivityModule(AppCompatActivity activity) {
        this.mActivity = activity;
    }

 @Provides
    DividerItemDecoration provideDividerItemDecoration() {
        return new DividerItemDecoration(mActivity, DividerItemDecoration.VERTICAL);
    }}

я предоставляю свой DividerItemDecoration таким образом.

и мой фрагмент Я просто вставляю

  @Inject
    DividerItemDecoration itemDecorator;

и использую его следующим образом:

itemDecorator.setDrawable(Objects.requireNonNull(getDrawable(getBaseActivity(), R.drawable.language_separator)));

Это нормально для фрагмента.

ПРОБЛЕМА:

В следующий раз я могу использовать DividerItemDecoration в другом фрагменте как Горизонтальный .. и я не могу снова предоставить DividerItemDecoration снова.

Я хочу создать общий метод или что-то в этом роде.Я вставлю свой фрагмент, например,

@Inject 
DividerItemDecoration itemDecorator(horizontal???).. ? 

Я не знаю, как его синтаксис и логика.

Как предоставить и внедрить такого рода коды?

В ожидании вашей поддержки.

Также это нативное представление о материале, Может быть, в него не нужно вводить. Пожалуйста, выскажите свое мнение. Напоминаю, что мне все еще нужен пример и учиться.за такие методы инъекций и предоставления ..

Большое спасибо

1 Ответ

0 голосов
/ 27 марта 2019

Я хочу поделиться текстом о внедрении зависимостей. Это заставляет нас передумать, используя внедрение зависимостей:

Не (всегда) используйте DI: инъекционные и новые препараты

Что-то очень полезное для меня при изучении DI рамки было осознание того, что использование структуры DI не означает, что вам нужно DI для инициализации всех ваших объектов. Как правило thumb: вводить объекты, которые вы знаете во время компиляции и которые имеют статические отношения с другими объектами; не вводить информацию времени выполнения.

Я думаю, что это хороший пост на эту тему. Это вводит понятие 'newables' и 'injectables'.

Injectables - это классы около корня вашего DI-графа. Инстансы из этих классов вид объектов, которые вы ожидаете, что ваш DI рамки для предоставления и введения. Объекты типа менеджера или службы Типичные примеры инъекционных препаратов. Newables - это объекты на окраинах вашего графика DI, или это даже не является частью вашего графика DI в все. Целое число, адрес и т. Д. Являются примерами newables. Говоря в широком смысле, newables являются пассивными объектами, и нет смысла вводить или издеваться над ними. Они обычно содержат «данные», которые находятся в вашем приложение, которое доступно только во время выполнения (например, ваш адрес). Новинки не должны хранить ссылки на инъекционные или наоборот (то, что автор поста называет "Инъекционный / newable разделительного").

В действительности я обнаружил, что не всегда легко или невозможно провести четкое различие между инъекционными и новыми. Тем не менее, я думаю, что они являются хорошими понятиями для использования в качестве части вашего мышления процесс. Определенно подумайте дважды, прежде чем добавлять еще одну фабрику в ваш проект!

Мы решили удалить инъекцию ArrayList, LinearLayoutManager, DividerItemDecoration. Мы создали эти классы с «новым», а не с внедрением

...