Android & Kotlin

Dagger by Tutorials

Learn dependency injection — an important technique for building software systems that are maintainable and testable. Dependency injection is nowhere near as complex as its name implies, and it becomes even easier by using Dagger — Google's framework that will help you solve development and performance issues that have plagued reflection-based solutions. By Massimo Carli.

Read for Free with the Personal Plan* * Includes this and all other books in our online library See all benefits
Buy Individually $59.99 $29.99* *Includes access to all of our online reading features.
Leave a rating/review
Download materials
Buy paperback—Amazon Comments
Save for later
Share

Who is this for?

This book is for intermediate Kotlin or Android developers who want to know how to implement the dependency injection pattern with Dagger and Hilt libraries.

Covered concepts

  • Dependency injection
  • Dagger
  • Injection types
  • Advanced Dagger
  • Hilt
Learn about dependency injection with Dagger!

Dependency injection is an important technique for building software systems that are maintainable and testable. You’re likely already doing dependency injection, maybe without even realizing it. Dependency injection is nowhere near as complex as its name implies, and this book will guide you through...

more

Before You Begin

This section tells you a few things you need to know before you get started, such as what you’ll need for hardware and software, where to find the project files for this book, and more.

Section I: DI Fundamentals

In this section, understand why you should use a dependency injection (DI) library like Dagger by learning all about the problem you need to solve: dependency.

You’ll understand what dependencies are and why you need to control them to create successful apps. You’ll get to know the Busso App, which you’ll work on, and improve throughout this book. And you’ll take your next step toward implementing better apps that are easier to test and modify.

1
Toggle description
In this chapter, you'll learn what is a dependency and how it impacts your code. You'll also learn how you can write better code using abstractions.
Toggle description
In this chapter, you’ll get to know the Busso App, which you’ll work on and improve throughout this book. It’s a client-server app where the server is implemented using Ktor.
Toggle description
In this chapter, you’ll take your next step toward implementing a better app that’s easier to test and modify. You’ll start by refactoring the Busso App in a world without Dagger or Hilt.
Toggle description
In this chapter, you’ll learn how Scope and dependency are related to each other. You’ll start by refactoring how SplashActivity uses Navigator. Next, you’ll define multiple ServiceLocator implementations, helping you understand how they depend on each other.
In this chapter, you’ll use an architectural pattern — Model View Presenter — along with what you learned in the previous chapters to create a fully-testable app. You’ll use techniques that would work in a world without frameworks like Dagger or Hilt.

Section II: Introducing Dagger

In this section, you’ll learn what Dagger is, how it works, and how it slashes the amount of code you need to write by hand when you implement dependency injection in your app.

You’ll learn how to deal with constructor, field and method injection with Dagger, how to simplify the implementation of @Module by using @Binds in cases when you have abstraction and its implementation, and how to use @Singleton to solve a very common problem.

Toggle description
In this chapter, you’ll learn what Dagger is, how it works and how it slashes the amount of code you need to write by hand when you implement dependency injection in your app.
Toggle description
In this chapter, you’ll discover even more about dependency injection with Dagger. You’ll learn how to deal with constructor, field and method injection with Dagger.
Toggle description
In this chapter, you’ll learn how to use different Dagger @Modules in the same app, how to optimize start-up performances using Dagger’s Lazy interface, and how to avoid cycled dependencies using the Provider interface.
Toggle description
In this chapter, you’ll learn more about modules. You'll see the benefits of using the @Binds annotation in a @Module, how to provide existing objects, like Android Context, when optional bindings can help, and more.

Section III: Components & Scope Management

In this section, you’ll migrate the Busso App from the homemade framework to Dagger. In the process, you’ll learn how to migrate the existing ServiceLocators and Injectors to the equivalent Dagger @Modules and @Components, how to provide existing objects with a customized Builder for the @Component using @Component.Builder, and how to use @Component.Factory as a valid alternative to @Component.Builder.

The first migration will not be optimal — there will still be some fundamental aspects you will improve.

Toggle description
In this chapter, you'll go back to working on the Busso App. You'll learn how to migrate the existing ServiceLocators and Injectors to the equivalent Dagger Modules and @Components, how to provide existing objects with a customized Builder for the @Component using @Component.Builder, and how to use @Component.Factory as a valid alternative to @Component.Builder.
Toggle description
In this chapter, you'll learn You’ll also learn about the definition of a component and how it relates to containers. You'll see what a lifecycle is, why it’s important, and what its relationship to the scope is. You'll also learn more about @Singletons, and What a @Scope is, and how it improves your app’s performance.
Toggle description
In this chapter, you'll learn even more about @Components and dependencies. In particular, you'll learn why @Singleton is not so different from the other @Scopes, why you might need a different approach to managing component dependencies, and more.

Section IV: Advanced Dagger

In this section, you’ll dive deeper into the advanced features of Dagger like multi-binding. Multibinding is a very interesting feature of Dagger because it simplifies the integration of new features using a plugin pattern you’ll learn in this section.

You’ll implement a simple framework that allows you to integrate new services in the Busso app in a very simple and declarative way. You’ll learn all you need to know about multi-binding with Set and Map.

Toggle description
In this chapter, you'll learn what multibinding is and how to use multibinding with Set.
Toggle description
In this chapter, you'll learn how to use multibinding with Map. You'll learn how to configure multibinding with Map and how to use fundamental type keys with @StringKey, @ClassKey, @IntKey, and @LongKey. You'll also create a simple custom key and use @KeyMap to build complex custom keys.
Toggle description
In this chapter, you'll learn how to configure and use Dagger in multi-module apps.

Section V: Introducing Hilt

In the last section, you’ll learn everything you need to know about Hilt. Hilt is a dependency injection library for Android that reduces the boilerplate of doing manual dependency injection in your project.

Hilt is built on top of the DI library Dagger to benefit from the compile-time correctness, runtime performance, scalability, and Android Studio support that Dagger provides.

Toggle description
In this chapter, you'll learn what Dagger Android is, how it works and how it slashes the amount of code you need to write by hand when you implement dependency injection in your app.
Toggle description
In this chapter, you'll learn what is Hilt library and how it reduces the boilerplate of doing manual dependency injection in your project.
Toggle description
In this chapter, you'll learn about the extensions that Hilt provides for providing classes from other Jetpack libraries.
Toggle description
In this chapter, you'll learn how Hilt makes testing your code easier.

Section VI: Appendices

Toggle description
In this Appendix, you'll look at how to implement dependency injection on the server using Koin.
Toggle description
In this Appendix, you'll learn all about assisted injection with Dagger and Hilt.