Я довольно новичок в Guice, и я немного застрял в данный момент.Guice multibinding-экземпляры получают разные зависимости-экземпляры
Я занимаюсь разработкой бэкэнда для небольшой игры на Java. Я хочу, чтобы динамически инъекционные системы игры с Guice и я использую MultiBinding для этого:
private class InstanceModule extends AbstractModule {
@Override
protected void configure() {
bind(GameInstance.class).to(GameInstanceImplementation.class);
bind(EntityManager.class).to(EntityManagerImplementation.class);
bind(EventBus.class).to(EventBusImplementation.class);
bind(MessageBroker.class).toInstance(broker);
Multibinder<GameSystem> systemBinder = Multibinder.newSetBinder(binder(), GameSystem.class);
for (Class<? extends GameSystem> systemClass : systemsConfig) {
systemBinder.addBinding().to(systemClass);
}
}
}
systemsConfig
просто Список классов GameSystem
с я хочу, чтобы игра загрузки.
В моей GameInstanceImplementation.class
я впрыснуть использованную GameSystems
так:
@Inject
public void setSystems(Set<IPMSystem> systems) {
this.systems = systems;
}
И я получаю GameInstance так:
GameInstance instance = injector.getInstance(GameInstance.class);
Я делаю это так, потому что каждый GameSystem
имеет разные зависимых, некоторые просто нуждаются в EntityManager
, некоторые нуждаются в EventBus
и так далее.
Теперь кажется, что каждый GameSystem
имеет разные EventBus
, EntityManager и т. Д., Поэтому они, конечно, не могут общаться друг с другом.
Я ожидал, что каждый GameSystem
получает одинаковые экземпляры связанных зависимостей.
Что мне здесь не хватает?
Спасибо заранее, Froschfanatika
Спасибо, что сделал трюк. Эти синглтоны не являются настоящими синглтонами, верно? Если все ссылки удалены (включая инжектор), они будут собирать мусор? – Froschfanatika
Да, они не синглтон в смысле шаблона GoF Singleton. Это область действия, характерная для каждого инжектора Guice - только один экземпляр существует на инжектор, поэтому они получают GC'd с инжектором. – sisyphus