如何在 Activity 以外的任何地方注入 Dagger 依赖项?
How to inject Dagger dependendcies anywhere, except Activity?
我是 Dagger 的新手,所以有些事情对我来说仍然很难掌握。
我有一个组件:
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AndroidSupportInjectionModule::class,
AppModule::class,
AuthModule::class
]
)
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(app: Application): Builder
@BindsInstance
fun appModule(@Named("application") app:Application): Builder
fun build(): AppComponent
}
fun inject(application: CommonApplication)
}
和一个模块:
@Module
class AppModule {
@Inject
@Named("application")
internal lateinit var application: Application
@Provides
@Singleton
fun provideApplicationContext() = application.applicationContext
@Provides
@Singleton
fun provideApplication() = application
}
在 Activity 我想注入依赖项的地方我使用
AndroidSupportInjection.inject(this/*activity*/)
这里有一个问题:
仅供理解。如果我想将 AppModule 提供的 applicationContext
注入 child class。例如,我有一个 class MainActivity 和 child class。我只想将 applicationContext 注入到此 child, 而不是将其作为参数传递。 如何做到这一点?
class MainActivity {
ChildClazz child;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this/*activity*/)
}
}
class ChildClazz {
/* HOW TO INJECT DEPENDENCY HERE?*/
@Inject
context:Context
}
一种方法是构造函数注入
class ChildClazz
@Inject
constructor(private val context: Context) {
}
然后,在您的 activity 中,您可以注入它。如果 dagger 能够解决你 ChildClazz
的所有依赖关系,你就可以开始了
@Inject
lateinit var child: ChildClazz;
在你的 AppModule
中你可以有类似
的东西
@Provides
fun provideContext(app: Application): Context = app.applicationContext
这将为您提供应用程序上下文
AndroidSupportInjection.inject(this/*activity*/)
必须在 super.onCreate
之前调用
我是 Dagger 的新手,所以有些事情对我来说仍然很难掌握。
我有一个组件:
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AndroidSupportInjectionModule::class,
AppModule::class,
AuthModule::class
]
)
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(app: Application): Builder
@BindsInstance
fun appModule(@Named("application") app:Application): Builder
fun build(): AppComponent
}
fun inject(application: CommonApplication)
}
和一个模块:
@Module
class AppModule {
@Inject
@Named("application")
internal lateinit var application: Application
@Provides
@Singleton
fun provideApplicationContext() = application.applicationContext
@Provides
@Singleton
fun provideApplication() = application
}
在 Activity 我想注入依赖项的地方我使用
AndroidSupportInjection.inject(this/*activity*/)
这里有一个问题:
仅供理解。如果我想将 AppModule 提供的 applicationContext
注入 child class。例如,我有一个 class MainActivity 和 child class。我只想将 applicationContext 注入到此 child, 而不是将其作为参数传递。 如何做到这一点?
class MainActivity {
ChildClazz child;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this/*activity*/)
}
}
class ChildClazz {
/* HOW TO INJECT DEPENDENCY HERE?*/
@Inject
context:Context
}
一种方法是构造函数注入
class ChildClazz
@Inject
constructor(private val context: Context) {
}
然后,在您的 activity 中,您可以注入它。如果 dagger 能够解决你 ChildClazz
的所有依赖关系,你就可以开始了
@Inject
lateinit var child: ChildClazz;
在你的 AppModule
中你可以有类似
@Provides
fun provideContext(app: Application): Context = app.applicationContext
这将为您提供应用程序上下文
AndroidSupportInjection.inject(this/*activity*/)
必须在 super.onCreate