CatInject
一个自动注入依赖的框架
导入
mavenCentral 版本:
mavenCentral 发布需要一定时间, 如果发现最新版本不能用, 建议稍等4小时左右
- 在项目根
build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("io.github.zsqw123:cat-inject-plugin:$version")
}
}
- 在需要用到注入的模块的
build.gradle
:
plugins {
id "cat-inject"
}
dependencies {
implementation "io.github.zsqw123:cat-inject-lib:$version"
}
使用
在需要自动注入的接口上添加注解 @CatInject
@CatInject
interface IUser {
fun getName(): String
fun getAge(): Int
}
在任意位置(任意内外部依赖均可)实现这个接口:
class UserImpl : IUser {
override fun getName(): String = "my-injected-user"
override fun getAge(): Int = 1
}
class UserImpl2 : IUser {
override fun getName(): String = "my-injected-user2"
override fun getAge(): Int = 2
}
然后在导入了依赖的库里面就可以自动注入依赖了!
val randomUser = CatInjects.getInstance<IUser>() // 随便获取一个实例
val age2user = CatInjects.getAllInstances<IUser>() // 获取全部实例, 筛选所需实例
.first { it.getAge() == 2 }
Thanks
Gradle Transform + ASM 探索 (juejin.cn)