Java&Android の世界に戻ってきました。コンパイル時間 DI と MvvM を活用する優れたプロジェクト スターターを探していたところ、次の 2 つを見つけました。
さて、私の問題です...ベースアクティビティを次のようにしたいと思います(重要な部分を保持します):
public abstract class ViewModelActivity<VM extends IViewModel> extends AppCompatActivity {
private ActivityComponent activityComponent;
@Inject
private VM viewModel;
protected void inject(AppComponent appComponent) {
appComponent.inject(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppComponent appComponent = ((MvvmApplication) getApplication()).getAppComponent();
inject(appComponent);
activityComponent =
DaggerActivityComponent.builder()
.appComponent(appComponent)
.activityModule(new ActivityModule(this))
.build();
ViewModel.State savedViewModelState = null;
if (savedInstanceState != null) {
savedViewModelState = savedInstanceState.getParcelable(EXTRA_VIEW_MODEL_STATE);
}
viewModel = createViewModel(savedViewModelState);
}
}
したがって、私の AppComponent は次のようになります。
@AppScope
@Component(modules = {
AppContextModule.class,
AppModule.class,
NetworkModule.class,
GsonModule.class
})
public interface MyAppComponent extends AppComponent {
void inject(DashboardActivity baseActivity);
Picasso picasso();
}
AppComponent の場所:
@AppScope
public interface AppComponent {
Context appContext();
void inject(ViewModelActivity viewModelActivity);
}
最後に、具体的なアクティビティは次のとおりです。
public class DashboardActivity extends ViewModelActivity<DashboardViewModel> {}
今、次のエラーが発生し続けます。
Error:(29, 10) error: activities.dashboard.DashboardViewModel cannot be
provided without an @Inject constructor or from an @Provides- or @Produces-
annotated method. This type supports members injection but cannot be
implicitly provided.
activities.dashboard.DashboardViewModel is injected at
mvvm.activity.ViewModelActivity.viewModel
activities.dashboard.DashboardActivity is injected at
app.inject(baseActivity)
私は何が欠けていますか?
ありがとう!