Skip to content

Hilt ‐ Using qualifiers

Devrath edited this page Oct 9, 2023 · 5 revisions

Observation

  • Here using the qualifier we can differentiate between two identical type instances belonging to different objects
  • In the Activity you can see that the cat is injected and annotated with a qualifier belonging to American cat.
  • This hilt will pick the American Instance belonging to the Cat interface.

Output

Cat instance -> 166290303
American Cat Running

Code

Qualifiers

AmericanCat.kt

@Qualifier
annotation class AmericanCat()

PersianCat.kt

@Qualifier
annotation class PersianCat()

Implementation

Cat.kt

interface Cat {
    fun getName() : String
}

AmericanCatImpl.kt

class AmericanCatImpl @Inject constructor(): Cat {
    override fun getName(): String {
        return "American Cat Running"
    }
}

PersianCatImpl.kt

class PersianCatImpl @Inject constructor() : Cat {
    override fun getName(): String {
        return "Persian Cat Running"
    }
}

Modules

CatModule.kt

@InstallIn(ActivityComponent::class)
@Module
abstract class CatModule {
    @Binds
    @AmericanCat
    abstract fun provideAmericanCat(impl: AmericanCatImpl) : Cat

    @Binds
    @PersianCat
    abstract fun providePersianCat(impl : PersianCatImpl) : Cat
}

Activity

MyActivity.kt

@AndroidEntryPoint
class HiltQualifiersActivity : AppCompatActivity() {

    private lateinit var binding: ActivityHiltQualifiersBinding

    @AmericanCat
    @Inject lateinit var cat : Cat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityHiltQualifiersBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setOnClickListeners();
    }

    private fun setOnClickListeners() {
        binding.apply {
            initiateId.setOnClickListener {
                PrintUtils.printLog("Cat instance -> "+cat.hashCode().toString())
                PrintUtils.printLog(cat.getName())
            }
        }
    }
}
Clone this wiki locally