android - Dagger 2.15 - 如何在应用程序类中注入依赖项
问题描述
我无法在 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
}
}
应用模块类:
@Module
class AppModule {
@Provides
fun provideSomeClass(context: Context) = SomeClass(context = context)
}
不确定缺少什么。
解决方案
我遇到了同样的问题,发现在使用in时我们不能inject(this)
在Application
课堂上打电话。正因为如此,我们不能注入任何我认为的东西。DaggerApplication
AppComponent
所以在 AppComponent 中你必须指定你的Application
Class 而不是输入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
现在你可以在课堂上注入了。
小提示:如果我说错了请纠正我,我不是匕首专家:)
推荐阅读
- kubernetes - 如何从现有集群中导出 kubeconfig 文件?
- visual-studio-code - VSCode - 如何仅在 javascript 文件中更改常量的颜色?
- css - Bulma CSS 类不适用于 Obelisk 项目中的元素
- ruby-on-rails - 我们如何在 rails 模型属性的渲染视图中获得翻译,例如博客文章?
- php - 此集合实例上不存在属性 [myTruck],在模型中将“myTruck”作为方法
- scikit-learn - 最新的 XGboost 和 Sklearn 给出错误
- c++ - 我的快速排序在对预先排序的项目进行排序时失败,如何改进?
- ruby-on-rails - 如何在测试前清除所有活动作业队列
- r - R包安装:ld:警告:找不到选项'-L/usr/local/gfortran/lib'的目录
- python - 我应该在一个类中做一个列表,具有添加到列表或删除的功能,但它不起作用