sil*_*rol 6 android kotlin dagger-2
我无法在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
}
Run Code Online (Sandbox Code Playgroud)
零件:
@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
}
}
Run Code Online (Sandbox Code Playgroud)
AppModule类:
@Module
class AppModule {
@Provides
fun provideSomeClass(context: Context) = SomeClass(context = context)
}
Run Code Online (Sandbox Code Playgroud)
不知道缺少什么。
我遇到了同样的问题,并发现使用in 不能inject(this)在Application课堂上打电话。因此,我们无法注入我认为的任何内容。DaggerApplicationAppComponent
因此,在AppComponent中,您必须指定ApplicationClass而不是键入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();
}
}
Run Code Online (Sandbox Code Playgroud)
还有你的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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以Application上课了。
小提示:如果我说错了,请纠正我,我不是Dagger的专家:)
您应该实现 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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2464 次 |
| 最近记录: |