Android中Dagger变量注入自定义接口是否可行?注入问题解析
问题分析与解决方案
核心问题
你遇到的接口注入失败是类名冲突导致的:自定义的Connection接口和JDK内置的java.sql.Connection重名,Dagger在解析依赖时错误匹配到了JDBC的Connection类,而你的Module提供的是自己定义的Connection实现,两者类型不匹配,因此抛出MissingBinding错误。
可行方案
完全可以通过变量注入接口,解决方法如下:
方案1:显式指定自定义接口的包名
在IntroScopeDemoActivity中,注入接口时明确使用自定义Connection的全限定类名,避免Dagger混淆类型:
// 替换成你自定义Connection所在的实际包名 @Inject lateinit var connInterface: com.istudio.di.modules.dagger.demos.scopes.introdemo.Connection
方案2:重命名自定义接口(推荐)
直接修改自定义接口的名称,彻底避免和JDK类重名,比如改成NetworkConnection:
- 修改
Connection.kt:
interface NetworkConnection { fun connect(endpoint: String) }
- 修改
HttpsConnection.kt:
class HttpsConnection @Inject constructor(): NetworkConnection { override fun connect(endpoint: String) { PrintUtils.printLog("HttpsConnection made") } }
- 修改
HttpsConnectionModule.kt:
@Module @DisableInstallInCheck class HttpsConnectionModule { @Provides fun provideHttpsConnection(): NetworkConnection { return HttpsConnection() } }
- 修改Activity中的注入代码:
@Inject lateinit var connInterface: NetworkConnection
验证修改
完成上述任一修改后,重新编译项目,Dagger就能正确识别你自定义的接口类型,注入即可正常工作。
内容的提问来源于stack exchange,提问作者Devrath
相关产品推荐
相关产品推荐

