2017-05-23 16 views
0

私はDagger 2を使い始めて、奇妙な問題に直面しました。 私は4つのモジュールを持っており、そのうち3つはApplicationComponentにあり、もう1つは異なるスコープ(UsersScope)を持っています。 UsersPresenterKotlin Dagger 2はInteractorを提供できません

Error:[BlankFragment)] com.interactors.UsersInteractor cannot be provided without an @Inject constructor or from an @Provides-annotated method.

UsersInteractorを注入すると

ここでの問題は、あなただけIUsersInteractorを提供するのでダガーに知られているいかなるUsersInteractorありません私のクラス

@Singleton 
@Component(modules = arrayOf(ApplicationModule::class, NetworkModule::class, DbModule::class)) 
interface ApplicationComponent { 
    fun plusUsersComponent(usersModule: UsersModule): UsersComponent 
} 


@Module 
class ApplicationModule(private val context: Context) { 
@Provides 
@Singleton 
    fun provideContext(): Context = context 
} 

@Subcomponent(modules = arrayOf(UsersModule::class)) 
@UsersScope 
interface UsersComponent { 
    fun inject(blankFragment: BlankFragment) 
} 

@Module 
class UsersModule { 

@Provides 
@UsersScope 
fun provideUsersRepository(restService: RestService, dbService: DbService): IUsersRepository = 
    UsersRepository(restService, dbService) 

@Provides 
@UsersScope 
fun provideUsersInteractor(usersRepository: UsersRepository): IUsersInteractor = 
    UsersInteractor(usersRepository) 

@Provides 
@UsersScope 
fun provideUsersPresenter(usersInteractor: UsersInteractor): IUsersPresenter = 
    UsersPresenter(usersInteractor) 
} 

@Scope 
@Retention(AnnotationRetention.RUNTIME) 
annotation class UsersScope 

答えて

2

です。

IUsersInteractorを使用するようにプレゼンタープロバイダ方法を切り替え

、それが動作するはず

fun provideUsersPresenter(usersInteractor: IUsersInteractor) 
関連する問題