Ich bin ziemlich neu in Dolch 2 und ich suche nach einer Möglichkeit, eine "konfigurierbare Komponente" zu haben.Dolch 2 Modul "Schnittstellen"?
Im Wesentlichen ist es das, was ich erreichen will:
public interface ErrorReporter{
...
}
public class ConsoleErrorReporter implements ErrorReporter{
... // Print to System.err
}
public class DialogErrorReporter implements ErrorReporter{
... // Show modal dialog to user
}
@Module
public interface UIModule{
@Provides
ErrorReporter provideErrorReporter();
}
@Module
public class ConsoleUIModule{
@Override
@Provides
ErrorReporter provideErrorReporter(ConsoleErrorReporter cer){
return cer;
}
}
@Module
public class GraphicalUIModule{
@Override
@Provides
ErrorReporter provideErrorReporter(DialogErrorReporter der){
return der;
}
}
@Component(modules = {UIModule.class, OtherUniversalModule.class})
public interface ApplicationComponent{
ErrorReporter errorReporter();
}
void main(String[] args){
final UIModule uiModule;
if(args.length == 1 && args[0].equals("gui")){
uiModule = new GraphicalUIModule();
}else{
uiModule = new ConsoleUIModule();
}
DaggerApplicationComponentdac = DaggerApplicationComponent.builder()
.uiModule(uiModule).build();
dac.errorReporter().showError("Hello world!");
}
Die oben mit @Provides methods cannot be abstract
leider sowohl für Schnittstellen und abstrakte Klassen ausfällt. Ich habe auch nicht abstrakte Basisklasse mit konkreten Implementierungen versucht, die null zurückgeben und dann diese in Unterklassen überschreiben. Dies schlägt jedoch auch mit @Provides methods may not override another method
fehl.
Kurz gesagt, ich möchte einen Vertrag für ein Modul definieren und während der Laufzeit verschiedene Module auswählen. Ich weiß, dass die Dagger 2 Kompilierzeit den Objektgraphen validiert, aber wenn ich einen gut definierten Vertrag habe, sollte das noch möglich sein, oder? Oder muss ich zwei verschiedene Komponenten mit doppeltem Code für beide Benutzeroberflächen erstellen? Gibt es andere Lösungen, die ich vermisse?
ich irgendwie habe es funktioniert, wenn ich mit 'javac' durch' kompilieren gradle' es kompiliert ... aber Ich bekomme Fehler, wenn ich in Eclipse mit 'm2apt' kompiliere (oder w/e heißt es), aus irgendeinem Grund erzeugt es nicht die Dolch-Komponente für eine der Komponenten, die die" Interface-Komponente "erbt ... Haben Sie dies festgestellt ? –
@EmilyL.Ich habe noch nie Eclipse mit Annotationsprozessoren benutzt, also weiß ich es ehrlich gesagt nicht. Vielleicht verwendest du eine andere Dolch-Version mit Eclipse? Ich habe '2.10' benutzt. –
Ich verwende das 'apt'-Plugin in Gradle, um die Eclipse-Dateien zu generieren. Und ich habe nachgeprüft, dass es der gleiche Dagger '2.10' ist. Ich werde tiefer graben müssen: –