【发布时间】:2019-11-14 04:15:42
【问题描述】:
我正在创建一个高度模块化的应用程序,我有很多需要注入的类,它们都是同一个类的子(不是直接子),它们都没有构造函数参数。
我想避免在我的模块中为它们中的每一个创建一个“@Provides”方法。
有没有办法告诉 dagger 自动提供所有实现基接口的类?还是可以自己使用反射来完成?
我在 kotlin 中使用 dagger-android
更新:我会发布一些代码来说明
在其中一个模块中我有这个界面
interface ExampleClass: BaseExample {
fun doSomething()
}
}
然后在主应用中实现它
class ExampleClassImpl @Inject constructor() : ExampleClass {
override fun doSomething(){
}
}
我需要它的类是使用 dagger 创建的 Viewmodel,因此注入适用于构造函数。
class ExampleViewModel @Inject constructor(val exmpl :ExampleClass) : BaseViewModel {
}
我想注入那个 ExampleClassImpl,为此我需要创建一个带有 @Provides 或 @Bind 注释的方法的 @module 并返回该类。
如果没有提供程序,我会在编译时出错:
错误:[Dagger/MissingBinding] com.myapp.ExampleClassImpl 不能在没有@Provides-annotated 方法的情况下提供。
【问题讨论】:
-
为什么需要为每个方法创建一个
@Provides方法?你不能用@Inject注释每个类构造函数还是我错过了什么? -
我已经在构造函数上有@Inject,但我仍然需要匕首来提供这些类
-
如果您在每个子类构造函数中都有
@Inject,那么 Dagger 将自动提供这些类。你不需要@Provides方法。 -
这似乎不对,如果我删除“@Provides”方法,我会得到:[Dagger/MissingBinding] com.myapp.ExampleClass 不能在没有“@Provides-annotated”方法的情况下提供。
-
假设
ExampleClass是一个具体的类,你在注释它的构造函数吗?请发布一些代码,以便我们了解您在做什么。