Dagger 2将命名对象注入到一个Activity中
我有一种感觉,这是对Dagger如何工作的一个简单的误解。 唉,我无法find问题。 我有几个GotIt像卡,我想要使用全部。 为此,我使用了一个模型,其中包括图标,正文文本,动作文本和动作点击处理程序。 各种活动使用不同的适配器来表示状态。 现在我正在关注一张卡片,告诉用户何时缺少位置权限。 我想要做的是创建一个模块,提供各种卡,我有(使用Kotlin):
@Module class GotItCardModule { @Provides @Singleton @Named(Manifest.permission.ACCESS_FINE_LOCATION) fun provideLocationGotItCard(application: Application): GotItViewHolder.GotItCard { val icon = ResourcesCompat.getDrawable(application.resources, R.drawable.ic_location_off_black_24dp, null)?.apply { DrawableCompat.setTint(this, Color.WHITE) } return GotItViewHolder.GotItCard( iconDrawable = icon, bodyText = application.getString(R.string.location_permission_gotit_body), primaryButtonText = application.getString(R.string.location_permission_gotit_action_primary), primaryButtonCallback = View.OnClickListener { v -> (v.context as? Activity)?.let { activity -> ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), RequestCode.Permission.ACCESS_FINE_LOCATION) } }) } }
我更新了我的AppComponent
来包含GotItCardModule::class
和我的MainActivity
:
@Inject @Named(Manifest.permission.ACCESS_FINE_LOCATION) lateinit var locationGotItCard: GotItViewHolder.GotItCard
当我建立我得到一个错误:
Error:(6, 1) error: [dagger.android.AndroidInjector.inject(T)] com.sample.test.adapters.holders.GotItViewHolder.GotItCard cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
我不明白的是我有一个@Provides
而且我把这个模块包含在最顶层。 为什么不能解决这个问题?
更新:
如果我删除@Named
一切正常(我只是不能有多个GotItCard
)。 我也尝试用硬编码的字符串替换字符串。 我仍然得到同样的错误。
- 如何使用改进发送请求到tt-rss api
- Kotlin崩溃无法将提供的符号转换为Dependency类型的对象:org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension_Decorated
- 使用kapt时,Dagger跳过Google服务模块的工厂代码
- Android,Espresso:预验证类中的类ref已解析为意外的实现
- 匕首2生成的测试组件不被识别
- 在kotlinunit testing中获得lambda捕获器的调用计数
- 选择后,Android微调器getDropDownView重复项目
- Inflator(root = null)布局破坏和Inflator(parentView = obj)无法设置位置
- 通用对值types的意图额外