Ниже приведен мой класс модуля
public class ABCModule extends AbstractModule {
@Override
protected void configure() {
install(new JpaPersistModule(Configuration.get("error-persister")));
bind(DBService.class).to(DBServiceImpl.class).in(Singleton.class);
bind(DBRepository.class).to(DBRepositoryImpl.class).in(Singleton.class);
}
@ProvidesIntoOptional(ProvidesIntoOptional.Type.ACTUAL)
public ErrorHandler getErrorHandler() {
return new ABCHandler();
}
}
, и ABCHandler имеет
private final DBService dbService;
@Inject
public ABCHandler() {
Injector injector = Guice.createInjector(new ABCModule());
injector.getInstance(PersistenceInitializer.class);
this.dbService = injector.getInstance(DBService.class);
}
@Override
public void handle() {
dbService.store("abc");
}
ABCModule
экземпляр, который создается и передается в какой-то универсальный модуль.Как видите, ABCModule
обеспечивает ABCHandler
, а ABCHandler
снова использует ABCModule
для создания инжектора и экземпляра службы.Это работает, но я знаю, что это не правильно.Module
вызывается дважды.Как ввести dbService
внутрь ABCHandler
без использования инжектора или создания экземпляра модуля.Я не хочу создавать пустой модуль для создания экземпляров.не могли бы вы предложить.Если я просто использую @Inject
на dbService
без использования инжектора, это будет равно нулю.Я использую Provider
внутри Module
, может нечто подобное сделано для dbService
.Или какие-то другие решения?