Ich habe angefangen, Dolch 2.2 zu verwenden, und die Modulmethoden im Builder für Komponenten sind veraltet.
Dies ist meine Anwendungskomponente:
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(Application application);
}
Und das Anwendungsmodul:
@Module
public class ApplicationModule {
Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Application providesApplication() {
return application;
}
}
Hier ist die generierte Klasse:
@Generated(
value = "dagger.internal.codegen.ComponentProcessor",
comments = "https://google.github.io/dagger"
)
public final class DaggerApplicationComponent implements ApplicationComponent {
private DaggerApplicationComponent(Builder builder) {
assert builder != null;
}
public static Builder builder() {
return new Builder();
}
public static ApplicationComponent create() {
return builder().build();
}
@Override
public void inject(Application application) {
MembersInjectors.<Application>noOp().injectMembers(application);
}
public static final class Builder {
private Builder() {}
public ApplicationComponent build() {
return new DaggerApplicationComponent(this);
}
/**
* @deprecated This module is declared, but an instance is not used in the component. This method is a no-op. For more, see https://google.github.io/dagger/unused-modules.
*/
@Deprecated
public Builder applicationModule(ApplicationModule applicationModule) {
Preconditions.checkNotNull(applicationModule);
return this;
}
}
}
Wie initialisiere ich die Komponente, wenn nicht mit dem ComponentBuilder?
Es wird als veraltet angezeigt, da Sie Component und Modul in Ihrer Anwendung von nicht verwenden
@Inject SomeObjectFromModule mSomeObject
Wenn Sie keine Abhängigkeiten in Ihre Anwendungen einfügen, können Sie Ihre Komponente nicht initialisieren. Suchen Sie daher nach mindestens einer Verwendung
Sobald Sie diese Zeilen in einer beliebigen Klasse hinzufügen, möchten Sie Ansichten einfügen und dann das Projekt sauber erstellen und neu erstellen, und Ihre Ablehnung wird behoben
quelle
Es zeigt Fehler an, wenn ich
Module
keine@Provides
Methode habe oder das Objekt, das von bereitstellt,Dagger
nicht in der App verwendet wird.Beispiel zum Entfernen eines veralteten Moduls
Modul
@Module public class SecondActivityModule { @Provides Book provideBookTest() { return new Book(); } }
Aktivität
public class SecondActivity extends AppCompatActivity { @Inject Book test; ... }
ODER in Komponente
@Component(modules = SecondModule.class) public interface SecondComponent { void inject(SecondActivity activity); Book getBookTest(); }
quelle
Ich habe das gleiche Problem mit dem Host und ich möchte nur, dass jeder ein veraltetes Problem mit der Builder-Klasse für generierte Komponenten hat. Sie sollten zwei Dinge überprüfen, um Zeit zu sparen:
1 / Korrigieren Sie die Dolchsyntax für das Modul. Überprüfen Sie auch sorgfältig, wo Sie injizieren.
2 / Das Injektionsobjekt (Inject Annotation und sein Objekt) muss an der Stelle sein, an der Sie injizieren möchten. Andernfalls kann der Dolch-Compiler nicht sehen, wo Ihr Modul verwendet werden soll, sodass eine Methode veraltet ist Kompiliere den Code neu, du wirst dieses Problem nicht mehr haben :)
quelle
Wenn Sie
void inject(AppCompactActivity activity);
in der Komponentenklasse deklarieren, wird die Modulmethode veraltet . Anstatt wie folgt eine enge Kopplung zu verwendenvoid inject(MainActivity activity);
und Ihr Projekt neu zu erstellen, gibt es in der Modulklasse keine veraltete Methodequelle