📜  Android中的手动依赖注入

📅  最后修改于: 2022-05-13 01:56:16.480000             🧑  作者: Mango

Android中的手动依赖注入

Android 是一个基于 Linux 内核的开源操作系统,用于智能手机、平板电脑等移动设备。此外,它是为智能手表和 Android TV 开发的。他们每个人都有一个专门的接口。 Android 一直是最畅销的智能手机操作系统之一。 Android OS 是由 Google 于 2005 年收购的 Android Inc. 开发的。在本文中,我们将了解手动依赖注入。所以首先,在学习 Dagger 依赖注入之前,我们应该知道为什么需要Dagger 这样的框架。在手动依赖注入中,我们手动执行的操作由 dagger 自动完成。因此,让我们通过制作一个需要注册用户的应用程序来理解这一点,将他们的凭据保存在数据库中并向他们发送成功注册的消息。我们将为数据库添加一条日志语句,并发送一条注册成功的消息。

分步实施

第 1 步:创建一个新项目

要在 Android Studio 中创建新项目,请参阅在 kotlin 的 android studio 中创建新项目。

第 2 步:我们将创建三个新的 Kotlin 类

  • 类 UserRepo – 保存用户凭据。
  • 类 EmailService – 向用户发送电子邮件以进行成功注册。
  • class UserRegistrationService – 要注册用户,该类依赖于 UserRepo 和 EmailService 类。

UserRepo 类

Kotlin
class UserRepo {
    fun saveUser(email:String,pass:String){
        Log.d(TAG,"user data saved")
    }
}


Kotlin
class EmailService {
    fun send(to: String,from: String,body:String){
       Log.d(TAG,"Email sent")
    }
}


Kotlin
class UserRegistrationService(
    private val userRepo: UserRepo,
    private val emailService: EmailService
) {
    fun userRegistration(email:String,pass:String){
        userRepo.saveUser(email,pass)
        emailService.send(email,"abc@gmail.com","")
    }
}


Kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val userRepo = UserRepo()
        val emailService = EmailService()
  
        val userRegistrationService = UserRegistrationService(userRepo,emailService)
        userRegistrationService.userRegistration("xyz@gmail.com","11111")
    }
}


电子邮件服务类

科特林

class EmailService {
    fun send(to: String,from: String,body:String){
       Log.d(TAG,"Email sent")
    }
}

UserRegistrationService 类,因为这个类依赖于 UserRepo 和 EmailService 类。我们需要为它提供它所依赖的类的对象。所以我们创建了一个构造函数来传递其他类的对象,而不是在 UserRegistrationService 类中创建这些对象。这称为手动依赖注入。

科特林

class UserRegistrationService(
    private val userRepo: UserRepo,
    private val emailService: EmailService
) {
    fun userRegistration(email:String,pass:String){
        userRepo.saveUser(email,pass)
        emailService.send(email,"abc@gmail.com","")
    }
}

第 3 步:使用 activity_main.xml 文件

导航到 app > res > layout > activity_main.xml 并将以下代码添加到该文件。下面是activity_main.xml文件的代码。

科特林

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val userRepo = UserRepo()
        val emailService = EmailService()
  
        val userRegistrationService = UserRegistrationService(userRepo,emailService)
        userRegistrationService.userRegistration("xyz@gmail.com","11111")
    }
}

因此我们可以在这里看到如果 UserRegistrationService 类依赖于两个类,我们很容易手动创建它的对象。如果一个类依赖于许多其他类,那么我们可以使用 Dagger 框架进行依赖注入。