fil*_*lur 5 android dagger-2 dagger-hilt
我有一个自定义 WebView,我将其添加到我的布局 xml 中:
<my.company.ui.ExtendedWebView />
Run Code Online (Sandbox Code Playgroud)
它扩展了原生 WebView:
class ExtendedWebView @JvmOverloads constructor(context: Context,
attrs: AttributeSet? = null, defStyle: Int = 0)
: WebView(context, attrs, defStyle) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如何使用 Hilt 将@Singelton类注入到上面的类中?财产注入?我应该如何注释该类?
我发现注释@AndroidEntryPoint需要位于视图、片段(如果在片段中)和活动上。因为注释。
因此,请考虑您的 DI 设置如下:
/* CONTENTS OF com.org.app.di/dependencyModule.kt */
@Module
@InstallIn(ViewComponent::class)
object DependencyModule {
@Provides
fun provideDependency(@ApplicationContext context: Context): DependencyType
= DependencyInstance(context)
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序已正确设置:
@HiltAndroidApp
class SuperAwesomeApplication : Application()
/* Remember to reference this is the manifest file, under the name attricbute! */
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个带有注入依赖项的视图:
@AndroidEntryPoint
class SuperAwesomeView(context: Context, attrs: AttributeSet) : View(context, attrs) {
@Inject
lateinit var dependency: DependencyType
...
Run Code Online (Sandbox Code Playgroud)
我会得到错误:
...
Caused by: java.lang.IllegalStateException: class com.app.org.ui.view.SuperAwesomeView, Hilt view must be attached to an @AndroidEntryPoint Fragment or Activity.
...
Run Code Online (Sandbox Code Playgroud)
所以我将@AndroidEntryPoint注释添加到包含视图的片段中:
@AndroidEntryPoint
class SuperAwesomeFragment : Fragment() {
...
Run Code Online (Sandbox Code Playgroud)
然后我们遇到了下一个错误:
Caused by: java.lang.IllegalStateException: Hilt Fragments must be attached to an @AndroidEntryPoint Activity. Found: class com.org.ui.SuperAwesomeActivity
Run Code Online (Sandbox Code Playgroud)
所以我了解到注释需要一直向上冒泡,从视图到(如果在片段中)片段,再到活动:
@AndroidEntryPoint
class SuperAwesomeActivity : AppCompatActivity() {
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6960 次 |
| 最近记录: |