il mio problema si riduce all'utilizzo di @Assisted con due argomenti stringa in fabbrica. Il problema è che, poiché Guice considera il tipo come meccanismo di identificazione dei parametri, entrambi i parametri sono uguali e ottengo un errore di configurazione.Utilizzo di @Assisted inject con più parametri dello stesso tipo (parametri @Named)
Alcuni Codice:
public class FilePathSolicitingDialog {
//... some fields
public static interface Factory {
public FilePathSolicitingDialog make(Path existingPath,
String allowedFileExtension,
String dialogTitle);
}
@Inject
public FilePathSolicitingDialog(EventBus eventBus,
SelectPathAndSetTextListener.Factory listenerFactory,
FilePathDialogView view,
@Assisted Path existingPath,
@Assisted String allowedFileExtension,
@Assisted String dialogTitle) {
//... typical ctor, this.thing = thing
}
// ... methods
}
Il problema sta nei parametri doppie stringhe.
Ho provato a codificare ogni stringa con annotazioni separate @Named ("come appropriato"), ma ciò porta solo a più errori di configurazione. Dal suono di quegli errori non vogliono annotazioni vincolanti sulla classe factory, quindi non ho provato annotazioni vincolanti personalizzate.
La soluzione più semplice e rumoroso è quello di creare una classe semplice argomento per contenere questi tre valori assistita, e semplicemente iniettare che:
public static class Config{
private final Path existingPath;
private final String allowedFileExtension;
private final String dialogTitle;
public Config(Path existingPath, String allowedFileExtension, String dialogTitle){
this.existingPath = existingPath;
this.allowedFileExtension = allowedFileExtension;
this.dialogTitle = dialogTitle;
}
}
public static interface Factory {
public FilePathSolicitingDialogController make(Config config);
}
@Inject
public FilePathSolicitingDialogController(EventBus eventBus,
SelectPathAndSetTextListener.Factory listenerFactory,
FilePathDialogView view,
@Assisted Config config) {
//reasonably standard ctor, some this.thing = thing
// other this.thing = config.thing
}
}
Questo funziona ed è probabile che sia abbastanza privo di bug, ma è rumoroso. Un modo per sbarazzarsi di quella classe statica annidata sarebbe bello.
Grazie per qualsiasi aiuto!
Grazie per questo. – Groostav