Próbowałem, bez powodzenia, wstrzykiwać aktywność w ViewUtils klasy. Obserwowałem kilka różnych stanowisk, ale nie mogę zrozumieć, czego brakuje mi w mojej implementacji.Sztylet 2.10/2.11 Niepowodzenie działania wtrysku
Wiem, że to prawdopodobnie powtórzenie postów poniżej i naprawdę przepraszam za to, ale szczerze mówiąc nie widzę tego, czego mi brakuje. Są to słupy znalazłem:
- Dagger 2.10 Android subcomponents and builders
- How to create custom scoped modules in dagger 2.10
- https://google.github.io/dagger/subcomponents.html
Moje wdrożenia jest w następujący sposób:
AppComponent
@Component(modules = {
AppModule.class, AndroidSupportInjectionModule.class, ActivityBindingModule.class
}) @Singleton public interface AppComponent extends AndroidInjector<EmblyApp> {
@Component.Builder abstract class Builder extends AndroidInjector.Builder<EmblyApp> {}
}
ActivityBindingModule
@Module public abstract class ActivityBindingModule {
@ContributesAndroidInjector
abstract LoginActivity loginActivity();
}
LoginSubcomponent
@Subcomponent(modules = LoginSubcomponent.LoginActivityModule.class)
public interface LoginSubcomponent extends AndroidInjector<LoginActivity> {
@Subcomponent.Builder abstract class Builder extends AndroidInjector.Builder<LoginActivity> {}
@Module abstract class LoginActivityModule {
@Binds abstract Activity bindActivity(LoginActivity activity);
@Provides @ActivityScope static ViewUtils viewUtils(Activity activity) {
return new ViewUtils(activity);
}
}
}
ViewUtils
public class ViewUtils {
private final Activity activity;
@Inject public ViewUtils(Activity activity) {
this.activity = activity;
}
}
a błąd Dostaję brzmi:
Error:(14, 22) error: [dagger.android.AndroidInjector.inject(T)] android.app.Activity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
android.app.Activity is injected at
com.emblyapp.app.ui.helpers.ViewUtils.<init>(activity)
com.emblyapp.app.ui.helpers.ViewUtils is injected at
com.emblyapp.app.ui.authentication.login.LoginActivity.viewUtils
com.emblyapp.app.ui.authentication.login.LoginActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
Co jest nie tak? Dzięki za pomoc!
Edit: Zapomniałem wspomnieć mój LoginActivity ma zastrzyk z AndroidInjection
@Override protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
}
Tak! Dziękuję Ci. Nie zrozumiałem dobrze, co mówi ta część dokumentacji, która doprowadziła mnie do zamieszania. Teraz rozumiem. ContributesAndroidInjector pozwala mi pomijać podskładnik (który jest przez niego tworzony). Rozumiem! Dzięki za pomoc, teraz działa :) – Peddro