Я не могу внедрить зависимость в класс DaggerApplication
Соответствующие классы следующие
Заявление
class App : DaggerApplication() {
@Inject lateinit var mSomeClass : SomeClass // This is always NULL
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().application(this).build()
}
override fun onCreate() {
super.onCreate()
mSomeClass.initialize() // mSomeClass is NULL
}
Составная часть:
@Singleton
@Component(modules = [
AndroidSupportInjectionModule::class,
AppModule::class,
ViewModelFactoryModule::class,
BuildersModule::class
])
interface AppComponent : AndroidInjector<DaggerApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
}
AppModule класс:
@Module
class AppModule {
@Provides
fun provideSomeClass(context: Context) = SomeClass(context = context)
}
Не уверен, чего не хватает.
void inject(App app); и appComponent.inject(this)Пожалуйста, включите свой компонентный интерфейс.
@EpicPandaForce, не могли бы вы подробнее рассказать о своем заявлении?
Совершенно уверен, что это должен быть interface AppComponent : AndroidInjector<App>
@silent_control можешь найти решение? у меня та же проблема
Вы должны реализовать HasActivityInjector и его методы. Пример ниже. Надеюсь сработает.
class App : Application(), HasActivityInjector {
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
override fun onCreate() {
super.onCreate()
DaggerAppComponent
.builder()
.create(this)
.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity>? {
return dispatchingAndroidInjector
}
}
Я испытал ту же проблему и выяснил, что мы не можем вызвать inject(this) в классе Application при использовании DaggerApplication в AppComponent. Из-за этого, думаю, мы не можем ничего вводить.
Итак, в AppComponent вы должны указать свой класс Application вместо того, чтобы вводить DaggerApplication
Ваш AppComponent должен быть таким
@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class})
public interface AppComponent extends AndroidInjector<MyApplication> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
И ваш класс Application
public class MyApplication extends DaggerApplication {
@Inject
SomeClass mSomeClass;
@Override
public void onCreate() {
super.onCreate();
mSomeClass.initialize();
}
@Override
protected AndroidInjector<MyApplication> applicationInjector() {
AppComponent appComponent = DaggerAppComponent.builder().application(this).build();
appComponent.inject(this);
return appComponent;
}
}
Теперь вы можете вводить в класс Application.
Небольшая заметка: если я сказал что-то не так, пожалуйста, поправьте меня, я не эксперт по Dagger :)
очень шокирован, что это сработало. нет ничего плохого в том, что ты сказал, ты в моих глазах знаток кинжала. тысм
у вас есть смесь java и kotlin, пожалуйста, укажите язык, который вы пытаетесь