【问题标题】:Dagger 2 Activity cannot be provided without an @Provides- or @Produces-annotated method如果没有 @Provides- 或 @Produces-annotated 方法,则无法提供 Dagger 2 Activity
【发布时间】:2018-01-16 20:15:27
【问题描述】:

我是 Dagger 的新手,我正在尝试实现一个从发生注入的类继承的类。当我在 MainActivity 中注入一个组件并从 BaseActivity 继承它时,事情就发生了。

我的 AppComponentClass:

@Singleton
@Component(modules = {NetworkModule.class, ApplicationModule.class, 
AndroidModule.class})
public interface AppComponent {

   void inject (BaseActivity baseActivity);
   void inject (MainActivity mainActivity);
}
}

我的 ActivityModule 类:

@Module
public class ActivityModule {

private Activity activity;

public ActivityModule(Activity activity) {
    this.activity = activity;
}

@PerActivity
@Provides
@ActivityContext
public Context provideContext() {
    return activity;
}
}

我的 ApplicationModule 类:

@Module
public class ApplicationModule {

private Application application;

public ApplicationModule(Application application) {
    this.application = application;
}

@Provides
@Singleton
@ApplicationContext
public Context provideContext() {
    return this.application;
}

@Provides
@Singleton
public FCMTokenHelper provideFCMTokenHelper(Context context, ApiService apiService) {
    UserRepoImpl userRepo = new UserRepoImpl(apiService);
    return new FCMTokenHelper(context, context.getClass().getSimpleName(), userRepo);
}

@Provides
@Singleton
public UserRepoContract providerUserRepo(ApiService apiService) {
    return new UserRepoImpl(apiService);
}

}

我的两门课(都在 kotlin 中)

class MainActivity : BaseActivity() { 

}

abstract class BaseActivity : AppCompatActivity(), GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ActivityCompat.OnRequestPermissionsResultCallback, LocationListener {

   @Inject
   lateinit var userRepo: UserRepoContract

   @Inject
   internal var tokenHelper: FCMTokenHelper? = null
}

错误:

错误:(51, 10) 错误:如果没有 @Provides 注释的方法,则无法提供 .BaseActivity。 BaseActivity 在 AppComponent.inject(baseActivity) 注入 错误:(75, 10) 错误:没有 @Inject 构造函数或 @Provides 注释方法无法提供 MainActivity。 MainActivity 在 .AppComponent.inject(mainActivity) 处注入

使用 Dagger 2 版本 2.9 安卓工作室 3.0 Kotlin 和 Java 都有

【问题讨论】:

    标签: java android dependency-injection kotlin dagger-2


    【解决方案1】:

    我的问题在这里:

    @Inject
    internal var tokenHelper: FCMTokenHelper? = null
    

    改成:

    @Inject
    lateinit var tokenHelper: FCMTokenHelper
    

    解决了这个问题。看好解释here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      相关资源
      最近更新 更多