Saj*_*Zeb 1 java android class dagger-2
I am using dagger 2. And injecting my dependency in activities and fragments which is working fine.
AndroidInjection.inject(this) for activities inside onCreate.
// for the activity
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
}
Run Code Online (Sandbox Code Playgroud)
AndroidSupportInjection.inject(this) for fragments inside onAttach.
// for fragments
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
Run Code Online (Sandbox Code Playgroud)
Now i want to inject my same dependency in a custom or util class named AsyncTaskHandler. I am not able to access that dependency.
I suppose i have to add AndroidInjection.inject(this) line somewhere. but it does not have any onCreate or onAttach function. So how to get the dependency accessible in my util class or to how to call that dependency.
Thanks in advance.
AndroidInjection 并不旨在帮助处理不是 Android 框架子类的类。相反,您应该执行以下操作之一:
在启用 DI 的类(Activity、Fragment 等,或它们注入的任何内容)中,注入 AsyncTaskHandler 或Provider<AsyncTaskHandler>通过带@Inject注释的构造函数或字段。这将为您提供一个完全注入的 AsyncTaskHandler,而 Provider 将为您提供您可能需要的数量(包括零)。这也允许您在不同的配置中替换 AsyncTaskHandler 或其工厂,或者在测试中替换 AsyncTaskHandler 实例。
如果 AsyncTaskHandler 是您不需要替换的实现细节,即使在测试中,您也可以调用new AsyncTaskHandler. DI 的使用并不意味着每个类都被注入。当然,如果AsyncTaskHandler有很多依赖,即使你不打算在任何配置中替换AsyncTaskHandler本身,为了方便和可配置性,你也可以选择注入。
如果即使没有封闭的 DI 环境也必须让 AsyncTaskHandler 自身注入,则可以制定自己的解决方案:确保 AsyncTaskHandler 可以访问 Application 实例,将其转换为允许注入的接口,然后使用成员注入方法。您还可以选择将您的 Component 或 a 保存MembersInjector<AsyncTaskHandler>到某处的静态字段中,并访问它以允许注入您的 AsyncTaskHandler — 可能将静态字段保留在 AsyncTaskHandler 本身上。您将希望Application#onCreate在创建 Component 实例的地方或任何地方执行此操作。
在不依赖于测试不友好的静态注入器的情况下从任意类实例获取 Application 实例的困难,或者确保在 AsyncTaskHandler 需要它时使用 Component 或 MembersInjector 填充静态字段的困难,是 AndroidInjection 的部分原因其范围仅限于排除此类用例。您需要确保其余代码的结构是安全的。
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |