📌  相关文章
📜  Android 中的 Dagger Hilt 示例(1)

📅  最后修改于: 2023-12-03 14:59:15.996000             🧑  作者: Mango

Android 中的 Dagger Hilt 示例

Dagger Hilt是一种基于Dagger 2的依赖注入框架,用于Android开发。它使依赖注入更加简单和易于理解,并且为开发人员提供了更多的工具来简化他们的开发工作流程。本文将介绍Dagger Hilt的用法,包括注入Activity、Fragment、ViewModel和单例等场景的示例。

简介

在介绍Dagger Hilt之前,我们需要先了解什么是依赖注入。依赖注入的核心概念是将对象的创建和对象之间的依赖关系单独管理。通过将对象的创建和依赖关系抽象出来,我们可以更容易地理清代码的逻辑和关系。如果正确使用,依赖注入可以大大简化代码,并且可以使测试更方便。

Dagger Hilt就是一个用于管理依赖关系的框架。它使用注解来定义依赖关系,并使用编译时生成的代码将这些依赖注入到需要它们的地方。这个过程可以在应用程序启动时完成,这样就避免了在运行时进行注入的开销。

示例

我们将从以下几个场景介绍Dagger Hilt的使用。

注入Activity

首先,我们需要在Application中添加一些代码来启用Hilt。具体来说,我们需要在Application上添加@HiltAndroidApp注解,并在其中指定应用的Application类。

@HiltAndroidApp
class MyApp : Application() {
    // ...
}

接下来,我们创建一个MainActivity,并声明我们需要注入的变量。然后,我们在Activity上添加@AndroidEntryPoint注解,这样Dagger Hilt就知道在这里进行注入。

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject lateinit var myDependency: MyDependency

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...
    }
}

如果MyDependency是一个类,它需要使用@Inject注解进行标注,以便Dagger Hilt知道如何创建它。

class MyDependency @Inject constructor() {
    // ...
}

最后,我们需要确保在onCreate()方法中的super()方法之后调用AndroidInjection.inject(this)方法,这将会对Activity进行注入。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    AndroidInjection.inject(this)
    // ...
}
注入Fragment

与Activity相似,我们需要在Fragment上添加@AndroidEntryPoint注解,从而使Dagger Hilt知道在此进行注入。

@AndroidEntryPoint
class MyFragment : Fragment() {
    @Inject lateinit var myDependency: MyDependency

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // ...
    }
}

这里的MyDependency同样需要一个@Inject注解。

class MyDependency @Inject constructor() {
    // ...
}
注入ViewModel

Dagger Hilt还可以帮助我们注入与ViewModel相关的依赖项。我们需要在ViewModel上添加@HiltViewModel注解,并且在其中指定ViewModel所需的构造函数参数。

@HiltViewModel
class MyViewModel @Inject constructor(
    private val myDependency: MyDependency
) : ViewModel() {
    // ...
}

这里的MyDependency同样需要一个@Inject注解。

class MyDependency @Inject constructor() {
    // ...
}

最后,我们可以使用ViewModelProvider来获取一个实例。

val myViewModel: MyViewModel by viewModels()
注入单例

我们可以使用@Singleton注解将依赖标记为单例。

@Singleton
class MyDependency @Inject constructor() {
    // ...
}

这将保证Dagger Hilt只会创建一个实例,并在需要时将其注入到其他类中。

结论

Dagger Hilt是一个非常好用的Android依赖注入框架。通过标注和配置注解,我们可以显式地定义依赖关系,并使其变得易于理解和测试。在您的下一个Android项目中,为Dagger Hilt给予一次机会并体验它可能会给您带来的依赖注入不一样的世界。