Привязка карты классов к экземплярам внутри модуля guice
В настоящее время я пытаюсь добавить записи карты, состоящей из Map<? extends CustomModule, CustomModule>
(из дополнительной, пользовательской модульной системы) в качестве привязок в модуле guice.
Мой код до сих пор выглядит так:
manager.getRegistry().forEach(new BiConsumer<Class<? extends CustomModule>, ModuleRegistry.Entry>() {
@Override
public void accept(Class<? extends CustomModule> moduleClass, ModuleRegistry.Entry entry) {
bind(moduleClass).to(entry.getModule()); // getModule() returns the instance which implements moduleClass
}
});
Guice, к сожалению, нужен прямой класс вместо подстановочного знака ("? Extends"). Поскольку я уже получил "привязки", есть ли другой способ добавить их в инжектор?
Заранее спасибо!
1 ответ
Поэтому, попробовав другие возможные способы, я наконец нашел тот, который работает. Поскольку первоначальная проблема заключалась в том, что Guice требовал "захвата" чего-либо (в данном случае "захвата? Экземпляра модуля extends", в основном означает что-то, что является экземпляром чего-то, что является модулем), и произошел сбой, мне пришлось отлить свой уже известный класс модуля к его необработанному типу, как это:
final Class moduleClass = (Class) aClass;
final Binding binding = injector.getExistingBinding(Key.get(moduleClass));
if (binding == null) {
bind(moduleClass).toInstance(entry.getModule());
}
Мне также пришлось добавить нулевую проверку в моем случае, но она также включает способ приведения неизвестного класса к помощнику "Ключа".