Exploring Dependency Injection in Android with Dagger 2

Exploring Dependency Injection in Android with Dagger 2

ยท

2 min read

Dependency Injection (DI) is a crucial concept in software development that aids in achieving better code maintainability, testability, and scalability. When it comes to Android app development, Dagger 2 is a popular framework used to implement DI effectively. In this blog post, we'll walk through the process of integrating Dagger 2 into an Android application.

Step 1: Adding Dagger 2 to the Project

To begin, open your app-level build.gradle file and add the Dagger 2 dependencies:

dependencies {
    // Other dependencies...
    implementation 'com.google.dagger:dagger:2.38.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.38.1'
}

Step 2: Creating a Module

A Dagger module is responsible for providing instances of the dependencies we want to inject. Let's create an AppModule:

@Module
class AppModule {

    @Provides
    fun provideMyDependency(): MyDependency {
        return MyDependency()
    }
}

In this module, we define a method provideMyDependency() annotated with @Provides. This method provides an instance of MyDependency, which we want to inject.

Step 3: Creating a Component

Next, let's create a Dagger component that ties the module and the injection target (our MainActivity) together:

@Component(modules = [AppModule::class])
interface AppComponent {
    fun inject(activity: MainActivity)
}

The AppComponent interface is annotated with @Component and specifies the modules it will use (AppModule in this case). The inject() method injects the dependencies into the specified target.

Step 4: Defining the Dependency

Now, let's define the MyDependency class:

class MyDependency {
    fun doSomething(): String {
        return "Dependency is doing something!"
    }
}

This class represents the dependency we'll be injecting into our MainActivity.

Step 5: Using Dependency Injection in an Activity

In the MainActivity, we'll use Dagger to inject the MyDependency:

class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var myDependency: MyDependency

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        DaggerAppComponent.builder()
            .appModule(AppModule())
            .build()
            .inject(this)

        val result = myDependency.doSomething()
        // Use the result as needed
    }
}

Here, we annotate myDependency with @Inject, indicating that Dagger should provide this dependency. In the onCreate() method, we build the Dagger component and perform the injection.

Conclusion

Dagger 2 simplifies the implementation of Dependency Injection in Android apps. By following the steps outlined in this blog post, you can effectively use Dagger 2 to manage dependencies and write more maintainable, testable, and scalable Android applications. Happy coding! ๐Ÿš€

ย