Я обнаружил, что аннотация @AndroidEntryPoint
должна быть в представлении, во фрагменте (если во фрагменте) и в действии. Потому что Аннотации.
Итак, считайте, что ваш DI настроен следующим образом:
/* CONTENTS OF com.org.app.di/dependencyModule.kt */
@Module
@InstallIn(ViewComponent::class)
object DependencyModule {
@Provides
fun provideDependency(@ApplicationContext context: Context): DependencyType
= DependencyInstance(context)
}
И мое приложение правильно настроено:
@HiltAndroidApp
class SuperAwesomeApplication : Application()
/* Remember to reference this is the manifest file, under the name attricbute! */
Теперь, если у меня есть представление с внедренной зависимостью:
@AndroidEntryPoint
class SuperAwesomeView(context: Context, attrs: AttributeSet) : View(context, attrs) {
@Inject
lateinit var dependency: DependencyType
...
Я получу ошибку:
...
Caused by: java.lang.IllegalStateException: class com.app.org.ui.view.SuperAwesomeView, Hilt view must be attached to an @AndroidEntryPoint Fragment or Activity.
...
Поэтому я добавил аннотацию @AndroidEntryPoint
к фрагменту, содержащему представление:
@AndroidEntryPoint
class SuperAwesomeFragment : Fragment() {
...
И тогда мы получаем следующую ошибку:
Caused by: java.lang.IllegalStateException: Hilt Fragments must be attached to an @AndroidEntryPoint Activity. Found: class com.org.ui.SuperAwesomeActivity
Итак, я узнал, что аннотации должны подниматься вверх, от просмотра до (если во фрагменте) фрагмента, до действия:
@AndroidEntryPoint
class SuperAwesomeActivity : AppCompatActivity() {
...
person
Quintin Balsdon
schedule
18.11.2020