хорошо, я постараюсь ответить
Вы не можете использовать Field Injection, которое Greetings
в классе TestGreetings
, потому что Dagger не знает, как его ввести.
Внедрение полей обычно используется для компонентов, связанных с Android Framework, поэтому в вашем случае MainActivity
TestGreetings
класс не Android Framework, поэтому лучше использовать Внедрение конструктора, например
class TestGreetings(private val greetings: Greetings) {
fun checkIfNull() {
if (greetings != null) {
Log.d("INFO", "${ greetings.sayHello}")
} else {
Log.d("INFO", "null !!!!!!")
}
}
}
Чтобы Dagger знал, как инициализировать класс TestGreetings
, вам необходимо определить его в GreetingsModule
class
@Module
class GreetingsModule {
...
@Provides
@Singleton
fun providesTestGreetings(greetings: Greetings): TestGreetings {
return TestGreetings(greetings)
}
}
Теперь вы можете используйте TestGreetings
класс в MainActivity
class MainActivity: AppCompatActivity() {
@Inject
lateinit var testGreetings: TestGreetings
override fun onCreate(savedInstanceState: Bundle?) {
...
testGreetings.checkIfNull()
}
}
Наконец, вы можете удалить fun inject(testGreetings: TestGreetings)
в GreetingsComponent
Ps Убедитесь, что ваша настройка Dagger в MainActivity
верна
Надеюсь, это проясняет ситуацию :)