Android Dagger 2.15-如何在应用程序类中注入依赖项
我无法在DaggerApplication类中注入依赖项 有关类别如下: 应用Android Dagger 2.15-如何在应用程序类中注入依赖项,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我无法在DaggerApplication类中注入依赖项 有关类别如下: 应用 class App : DaggerApplication() { @Inject lateinit var mSomeClass : SomeClass // This is always NULL override fun applicationInjector(): AndroidInjector<out DaggerApplication> { return DaggerAppComp
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
}
不确定缺少了什么。您应该实现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
}
}
类应用程序:应用程序(),HasActivityInjector{
@注入
lateinit var分派AndroidInjector:分派AndroidInjector
重写fun onCreate(){
super.onCreate()
匕首成分
.builder()
.创建(此)
.注入(这个)
}
覆盖有趣的活动Injector():AndroidInjector{
回程调度和回程调度
}
}
我遇到了同样的问题,并且发现在
AppComponent
中使用DaggerApplication
时,我们不能在Application
类中调用inject(this)
。因此,我认为我们不能注射任何东西
因此,在AppComponent中,您必须指定应用程序
类,而不是键入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();
}
}
现在您可以插入应用程序类
小提示:如果我说错了什么,请纠正我,我不是Dagger方面的专家:)你有java和kotlin的混合体,请用你正在尝试的语言精确说明void inject(App)代码>和appComponent.inject(此)
请包括您的组件接口。@EpicPandaForce,您能详细说明一下您的声明吗?非常确定这应该是接口appComponent:androidjector
非常震惊这项工作。你说的没什么错,你是我眼中的匕首专家。泰姆
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
}
}
@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class})
public interface AppComponent extends AndroidInjector<MyApplication> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
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;
}
}