这是我在“活动”中的代码。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_work_order)
DaggerWorkOrderComponent.factory()
.create(activity)
.inject(activity)
}
这是我的模块。
@Module
object WorkOrderModule {
private lateinit var context: Context
fun setWorkOrderActivityContext(ctx: Context) {
context = ctx
}
@Provides
@JvmStatic
fun provideContext(): Context = context
@Provides
@JvmStatic
fun provideLogger(): Logger = getLogger()
@Provides
@JvmStatic
fun provideAppDataManager(): AppDataManager = getAppDataManager()
@Provides
@JvmStatic
fun provideFirebaseManager(): FirebaseManager = getFirebaseManager()
@Provides
@JvmStatic
fun provideViewModel(
logger: Logger,
appDataManager: AppDataManager,
firebaseManager: FirebaseManager
): WorkOrderVM = WorkOrderVM(context, logger, appDataManager, firebaseManager) // <=== line 45
}
最后,这是我的组件。 @FeatureScope
@Component(modules = [WorkOrderModule::class])
interface WorkOrderComponent {
@Component.Factory
interface Factory {
fun create(@BindsInstance context: Context): WorkOrderComponent
}
fun inject(activity: WorkOrderActivity)
}
应用程序崩溃,这就是我得到的:
原因:kotlin.UninitializedPropertyAccessException:lateinit 属性上下文尚未初始化 在com.atco.forsite.screens.inspection.workOrder.di.WorkOrderModule.provideViewModel(WorkOrderModule.kt:45)
第45行已在模块中标记。
答案 0 :(得分:0)
提供Context
作为 Dagger 模块的构造函数参数:
@Module
class WorkOrderModule constructor(private val context: Context)
这里不再需要lateinit var context
和fun setWorkOrderActivityContext(ctx: Context)
。
然后在Activity
的{{1}}中将模块设置为component:
onCreate()
在这种情况下,也不需要DaggerWorkOrderComponent
.builder()
.module(
WorkOrderModule(this)
)
.build()
.inject(this)
。