Dagger 2 @Provides нельзя применить к статической функции в Kotlin? - PullRequest
0 голосов
/ 05 января 2019

У меня есть следующий код Java, который отлично работает

@Module(subcomponents = {MainActivityComponent.class})
abstract public class ActivityBuilder {

    @Provides
    @Singleton
    static Context provideContext(Application application) {
        return application;
    }

    @Binds
    @IntoMap
    @ClassKey(MainActivity.class)
    abstract AndroidInjector.Factory<?> bindMainActivity(MainActivityComponent.Builder builder);
}

Когда я конвертирую его в Котлин

@Module(subcomponents = [MainActivityComponent::class])
abstract class ActivityBuilder {
    companion object {
        @Provides
        @Singleton
        fun provideContext(application: Application): Context {
            return application
        }
    }

    @Binds
    @IntoMap
    @ClassKey(MainActivity::class)
    abstract fun bindMainActivity(builder: MainActivityComponent.Builder): AndroidInjector.Factory<*>

}

Я получил сообщение о том, что у меня не может быть @Provides в статической функции.

error: @Provides methods can only be present within a @Module or @ProducerModule
    public final android.content.Context provideContext(@org.jetbrains.annotations.NotNull()
                                         ^  

Как я могу это исправить?

1 Ответ

0 голосов
/ 05 января 2019

Видимо работает ниже.

@Module(subcomponents = [MainActivityComponent::class])
abstract class ActivityBuilder {

    @Module
    companion object {
        @JvmStatic
        @Provides
        @Singleton
        fun provideContext(application: Application): Context {
            return application
        }
    }

    @Binds
    @IntoMap
    @ClassKey(MainActivity::class)
    abstract fun bindMainActivity(builder: MainActivityComponent.Builder): AndroidInjector.Factory<*>

}
...