当我只对接口的一种实现使用依赖注入时,是否需要创建@Module?

Do I need to create @Module when I use dependency injection for only one implementation of an interface?

我正在阅读文章 Using Hilt in your Android app

代码 A 和代码 B 均来自解决方案分支中的 sample project

AppNavigatorImpl只是接口AppNavigator的一种实现,AndroidStudio还提示Class NavigationModule" is never used在代码B中,可以看到图片B。

所以我认为 Hilt 可以自动创建 AppNavigatorImpl 的实例。

但是当我从项目中删除代码 B 时出现以下错误,为什么?

com.example.android.hilt.navigator.AppNavigator 不能在没有@Provides 注释的方法的情况下提供

代码A

interface AppNavigator {   
    fun navigateTo(screen: Screens)
}


class AppNavigatorImpl @Inject constructor(private val activity: FragmentActivity) : AppNavigator {
   ...
}


@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject lateinit var navigator: AppNavigator
    ...

}

代码B

@InstallIn(ActivityComponent::class)
@Module
abstract class NavigationModule {

    @Binds
    abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator
}

图片 B

是的。它需要使用模块,因为您在 activity 中使用接口注入。重建项目后,代码将使用该模块。我想,IDE 显示模块 class 在重建项目之前未使用。