Задать вопрос
  • Применение Dagger 2 в модульной архитектуре - что и как?

    @marmuff Автор вопроса
    Итак, после копошения в документации прояснилось.
    Немного не закрыт вопрос с Dagger 2, но в целом:

    1) Если фича является сторонним функционалом, имеющим посредственное отношение к работе приложения - используется Dynamic Feature Module (что очень круто, т.к. можно ставить модули на лету). Dynamic Feature Module имеет свой контекст и, по своей сути, является "расширением". Можно использовать app модуль из feature, но использовать feature из app напрямую нельзя (точнее - настоятельно не рекомендуется, но теоретически возможно).

    2) Если это небольшая фича, относящаяся к непосредственному функционалу - используется предпочтительно Android Library (к примеру, в Android Library можно вынести работу с сетью).

    Как именно можно прокинуть классы из библиотеки в app или feature - понятно, вопрос с обратным действием (Library не имеет контекста выполнения как такового за исключением фрагментов и активностей). С подобной проблемой можно столкнуться, к примеру, реализуя в library стек а-ля Dagger 2 и Room Persistence Library, когда Room требует для билдинга контекст. Лично я решил тем, что отказался от Dagger в точке входа (т.е. инициализировал точку входа -> передал контекст и только потом подтянул Dagger) и в билдинге Instance Room. Если есть более приемлемые решения - буду благодарен. Завтра буду пробовать просто забрать app class из app module и вытащить контекст из него.

    Подробная информация по Android Library: https://developer.android.com/studio/projects/andr...
    Подробная информация по Dynamic Delivery: https://developer.android.com/guide/app-bundle/dyn...

    ВАЖНО: ключевые инстансы рекомендую предоставлять фичам из app module, т.к. для той же Room крайне рекомендуется использовать контекст приложения.
    Ответ написан
    Комментировать