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 )。 我也尝试用硬编码的字符串替换字符串。 我仍然得到同样的错误。