【发布时间】:2018-04-23 03:32:53
【问题描述】:
令人困惑的是,所有网络搜索结果似乎都使用了略有不同的 Dagger 版本或不同的方法。我遵循了声称这是更好的“新方法”的示例。 (https://proandroiddev.com/exploring-the-new-dagger-android-module-9eb6075f1a46) 完整的示例源代码在这里 (https://github.com/jshvarts/DaggerAndroidKotlinSampleApp)。
现在,我想知道如何为非活动/片段类提供上下文。所以,我添加了一个这样的简单类,
class Sample2 @Inject constructor (var app: Application)
{
fun print()
{
Log.d("sample2", app.packageName);
}
}
但是即使示例项目有 AppModule 和 AppComponent,编译失败,因为无法提供 app。
我已经在网上搜索并找到了这种方法(https://github.com/google/dagger/issues/832)。我按照该代码并像这样修改了示例的 AppModule 和 AppComponent,
@Module(includes = [AndroidInjectionModule::class])
abstract class AppModule {
@Binds
abstract fun application(app: App):Application;
@Singleton
@Provides
fun providesCommonHelloService() = CommonHelloService()
}
@Singleton
@Component(modules = [AndroidInjectionModule::class,
AppModule::class, ActivitiesModule::class])
interface AppComponent:AndroidInjector<App>
{
@Component.Builder
abstract class Builder:AndroidInjector.Builder<App>(){}
}
class App : Application(), HasActivityInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
override fun onCreate()
{
super.onCreate()
DaggerAppComponent.builder().create(this).inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
}
但是,我得到以下编译错误。
AppModule.java:7: 错误:@Module 不能同时包含非静态 @Provides 方法和抽象 @Binds 或 @Multibinds 声明 公共抽象类 AppModule {
再一次,就像我一开始所说的,网上的Dagger例子都略有不同,我不知道如何从两个例子中取两个特征。
【问题讨论】:
-
我正在打电话,否则我会提供正确的答案。由于我不能,请查看这篇博客文章,该文章准确描述了如何做你想做的事。完全披露:我写了这篇文章。 dev.to/autonomousapps/…