是否可以使用 Dagger 2.11 现场注入回收器视图适配器



我一直在使用新的dagger.android注入函数,到目前为止,我真的很喜欢它们。

但是,我遇到了这个小问题,似乎无法现场注入适配器或基本上我正在使用的任何非活动类。

我知道@Inject构造函数会更容易,但由于我通过构造函数将数据传递给我的回收器视图,这对我来说不是一个选择。

这意味着我必须调用组件来注入我的类。

使用如下所示的AppComponent类:

interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder {
abstract fun networkModule(networkModule: NetworkModule): Builder
}
fun inject(someClass SomeClass)
}

生成的DaggerAppComponent在说出DaggerAppComponent.builder().build()后无法识别.inject()方法

我显然误解了关于 Dagger 的一些东西,因为这似乎是注入类的规范方式。

我怀疑这是因为我从AndroidInjector扩展,但如果是这种情况,我将如何注入一个非活动类。因为即使我只为该类做了一个@Subcomponent,它仍然需要从DaggerAppComponent调用

这是一个品味问题(以及更完美的代码设计),但我认为你这样做的方式不正确。

"因为我通过构造函数将数据传递给我的回收器视图"是什么意思?将数据分配给适配器,而不是回收器视图本身。

如果您不想(但可能应该)使用 MVP 方法,那么从某个地方加载数据然后使用 RCV 显示数据的目标将如下所示:

class TestFragment : Fragment() {
val recyclerView: RecyclerView by bind(R.id.recyclerview) // Custom view binding but whatever
val adapter: TestAdapter? = null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.test, container, false)
// Initialize
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
adapter = TestAdapter(mutableListOf())
recyclerView.adapter = adapter
// Add data
adapter.addItem(MyClass("Hey it's working"))
return view
}
}

至于安卓dagger,我实际上并不觉得它比普通dagger更有用。它使事情变得更加复杂。

我强烈建议使用适用于安卓的 MVP。这是我的一个示例,它完全消除了对活动/组件注入任何依赖项的任何需要,请随时查看 MVP 示例

最新更新