В моем проекте Android и в моем модуле app
у меня есть экран входа в систему. Я хочу предоставить свой вид модели через кинжал. Тем не менее, это всегда null
, хотя я четко определил, как сгенерировать его в классе модуля. Это мой код:
class AuthViewModel(
private val firebaseAuth: FirebaseAuth,
private val logger: Logger
) {
....
}
Это объект модуля.
@Module
object AuthModule {
@Provides
@JvmStatic
fun provideLogger(): Logger = getLogger() // It creates a Logger object forsure. I confirm it doesn't return null.
@Provides
@JvmStatic
fun provideViewModel(firebaseAuth: FirebaseAuth, logger: Logger) = AuthViewModel(firebaseAuth, logger)
@Provides
@JvmStatic
fun provideFirebaseAuth() = FirebaseAuth.getInstance()
}
это компонент
@FeatureScope
@Component(modules = [AuthModule::class])
interface AuthComponent {
@Component.Factory
interface Factory {
fun create(
@BindsInstance context: Context
): AuthComponent
}
}
Вот как я внедряю его в свойдеятельность.
class AuthActivity : AppCompatActivity() {
@Inject lateinit var vm: AuthViewModel
@Inject lateinit var logger: Logger
companion object {
private val TAG = AuthActivity::class.java.simpleName
fun startActivity(ctx: Context) {
val intent = Intent(ctx, AuthActivity::class.java)
ctx.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerAuthComponent.factory()
.create(this)
logger.logDebug("test") // <==== Crashes here because logger is null
}
}
Сбой приложения в отмеченной строке выше, потому что логгер null
. Я отладил приложение и заметил, что ViewModel также имеет значение null.