Tri*_*ixy 9 android dagger-hilt
我正在尝试 hilt,我想注入 moshi 进行序列化和反序列化。
以下是来自 github Repo 的代码示例,该示例未使用 di:
open class InfoTypeConverter {
private val moshi = Moshi.Builder().build() //not using dependency injection
@TypeConverter
fun fromString(value: String): PokemonInfo.Type? {
val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
return adapter.fromJson(value)
}
@TypeConverter
fun fromInfoType(type: PokemonInfo.Type): String {
val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
return adapter.toJson(type)
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试随机的东西来现场注入,就像 @AndroidEntryPoint/@EntryPoint 的注释一样,显然它不起作用。
包含Moshi在 Hilt 依赖图中就像添加此类一样简单:
@Module
@InstallIn(ApplicationComponent::class)
object DataModule {
@Singleton
@Provides
fun provideMoshi(): Moshi {
return Moshi.Builder().build()
}
}
Run Code Online (Sandbox Code Playgroud)
@TypeConverters用于Room数据库。如果你想使用希尔特的 Moshi,你必须尝试一下。这样做的一种方法是:
@TypeConverter函数放入带有初始值设定项的静态上下文(object声明)中object InfoTypeConverter {
private lateinit var moshi: Moshi
fun initialize(moshi: Moshi){
this.moshi = moshi
}
@TypeConverter
fun fromString(value: String): PokemonInfo.Type? {
val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
return adapter.fromJson(value)
}
@TypeConverter
fun fromInfoType(type: PokemonInfo.Type): String {
val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
return adapter.toJson(type)
}
}
Run Code Online (Sandbox Code Playgroud)
InfoTypeConverter(此处使用相同的模块):@Module
@InstallIn(ApplicationComponent::class)
object DataModule {
@Singleton
@Provides
fun provideMoshi(): Moshi {
return Moshi.Builder().build()
}
@Singleton
@Provides
fun provideRoomDatabase(moshi: Moshi): YourDatabase {
InfoTypeConverter.initialize(moshi)
val yourDatabase: YourDatabase = /* create your room database here */
return yourDatabase
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2811 次 |
| 最近记录: |