Вот проблема, которую я встретил:Как связать класс Assisted Injected с интерфейсом?
Class SimpleCommand implements Executable{
private final ConfigManager config;
private String name;
@Inject
public SimpleCommand(ConfigManager config, @Assisted String name){
this.config = config;
this.name = name;
}
}
Class MyModule extends AbstractModule{
@Override
protected void configure() {
bind(CommandFactory.class).toProvider(FactoryProvider.newFactory(CommandFactory.class, SimpleCommand.class));
bind(Executable.class).to(SimpleCommand.class);
}
}
Когда я пытаюсь получить экземпляр SimpleCommand с помощью:
Guice.createInjector(new MyModule()).getInstance(CommandFactory.class).create("sample command");
Я получил эту ошибку:
1) No implementation for java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=) was bound.
while locating java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=)
for parameter 2 at model.Command.<init>(SimpleCommand.java:58)
at module.MyModule.configure(MyModule.java:34)
Так что моя проблема в том, как могу ли я связать SimpleCommand с исполняемым, когда SimpleCommand имеет параметр Assisted Injected?
Вот CommandFactory и его реализация:
public interface CommandFactory{
public Command create(String name);
}
public class GuiceCommandFactory implements CommandFactory{
private Provider<ConfigManager> configManager ;
@Inject
public GuiceCommandFactory(Provider<ConfigManager> configManager){
this.configManager = configManager;
}
public Command create(String cmd){
return new Command(configManager.get(), cmd);
}
}
Что такое команда? Должна ли фабрика возвращать исполняемый файл или SimpleCommand? – ColinD
Кроме того, почему у вас есть реализация CommandFactory? Идея заключается в том, что Assisted Inject создает реализацию для вас. – ColinD