Claude-skill-registry kotlin-di
Dependency Injection - Hilt, Koin, scopes, testing
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/kotlin-di" ~/.claude/skills/majiayu000-claude-skill-registry-kotlin-di && rm -rf "$T"
manifest:
skills/data/kotlin-di/SKILL.mdsource content
Kotlin DI Skill
Dependency Injection with Hilt and Koin.
Topics Covered
Hilt for Android
@HiltAndroidApp class App : Application() @Module @InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton fun provideDatabase(@ApplicationContext context: Context) = Room.databaseBuilder(context, AppDatabase::class.java, "app.db").build() @Provides fun provideUserDao(db: AppDatabase) = db.userDao() } @HiltViewModel class UserViewModel @Inject constructor( private val repository: UserRepository ) : ViewModel()
Koin for Multiplatform
val appModule = module { single { HttpClient(getEngine()) } single { UserRepository(get()) } viewModel { UserViewModel(get()) } } // Start Koin startKoin { modules(appModule) } // Inject val repository: UserRepository by inject()
Testing with DI
@HiltAndroidTest class UserViewModelTest { @get:Rule val hiltRule = HiltAndroidRule(this) @BindValue @JvmField val repository: UserRepository = mockk() @Inject lateinit var viewModel: UserViewModel @Before fun setup() { hiltRule.inject() } }
Troubleshooting
| Issue | Resolution |
|---|---|
| "No binding for..." | Add @Provides or @Binds |
| ViewModel not injected | Use hiltViewModel() in Compose |
Usage
Skill("kotlin-di")