【发布时间】: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