【发布时间】:2021-01-20 17:07:00
【问题描述】:
我一直在尝试解决我的问题,但我找不到任何东西...
MyApp.kt:
@HiltAndroidApp
class MyApp: Application()
MainActivity.kt
@AndroidEntryPoint
class MainActivity: AppCompatActivity()
MyFragment.kt
class MyFragment: Fragment() {
private val myViewModel: MyViewModel by viewModels()
}
MyViewModel.kt
class MyViewModel @ViewModelInject constructor(
application: Application,
myRepository: MyRepository, {*}
@Assisted private val state: SavedStateHandle,
): AndroidViewModel(application)
MyRepository.kt
interface MyRepository {
fun test()
}
class MyRepositoryImpl @Inject constructor(): MyRepository {
override fun test() { print("") }
}
MyModule.kt
@Module
@InstallIn(SingletonComponent::class)
abstract class MyModule {
@Binds
abstract fun bindsMyRepository(impl: MyRepositoryImpl): MyRepository
}
如果我用“{*}”注释该行,它可以正常工作,但由于我尝试添加我的自定义存储库,我收到了这个错误:
java.lang.RuntimeException:无法创建 MyViewModel 类的实例
原因:java.lang.NoSuchMethodException: [class android.app.Application]
你知道我错过了什么吗?
谢谢!
补充信息: 我忘了说这是一个多模块应用程序。
在第一个模块中,有一个基本的应用程序:MainActivity,一个清单(1)
在第二个模块中,有核心app:MyApp,一个manifest(2)
在第三个模块中,有模块:MyFragment、MyViewModel、MyRepository 和 MyModule,一个清单(3)
清单是这样的:
(1)
<manifest...>
<application...
android:name=".secondModule.MyApp">
</manifest>
(2)
<manifest...>
<application>
<provider...></provider>
</application>
</manifest>
(3)
<manifest.../>
【问题讨论】:
-
你需要这个接口做什么?
-
我已经尽可能地简化了我的代码 :) 我有一个调用 Api 类的存储库,但现在我已经将其删除,直到它工作为止
-
你需要添加一些 build.gradle 依赖,因为这听起来像是 Dagger + Hilt 版本不匹配。
-
我当前的版本(在 IR42 回答之后):匕首:2.31.1,刀柄:2.31-alpha
标签: android kotlin dagger-hilt