Я изучаю Google Guice. Вы знаете, как реализовать проблему «ноги робота»? Позвольте мне объяснить это на примере.Как использовать «футляр для ног робота» с помощью Google Guice?
Давайте предположим, что у меня есть некоторый класс называется Service
:
@Singleton
public class Service {
@Inject
Source source;
}
Интерфейс Source
имеет две реализации:
public class SourceDatabase implements Source {
}
public class SourceFileSystem implements Source {
}
Мой модуль реализована следующим образом:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Service.class).asEagerSingleton();
}
}
Ну , Я хотел бы знать, возможно ли это:
public class MainClass {
@Inject @SomeAnnotation("database")
Service serviceWithADatabaseSource;
@Inject @SomeAnnotation("file-system")
Service serviceWithAFileSystemSource;
}
Существует ли аннотацию или связывание, которые позволяют мне сделать это, позвольте мне аннотировать член как serviceWithADatabaseSource
, и это помогает Guice знать, что внутренний элемент source
должен быть введен с SourceDatabase
реализации?
Редактировать: Спасибо Даниэлю Мартину за то, что вы дали нам имя такого рода проблем на его комментарии.
https://github.com/google/guice/wiki/FrequentlyAskedQuestions # how-do-i-build-two-like-but-little-different-trees-of-objects (То, что вы описали, это проблема «ноги робота») –