Ответ 1
Кинжал активно требует, чтобы вы добавили @Inject в ваш класс для инъекций, добавив конструктор no-args или добавив инъекционное поле. Третий вариант - вернуть класс из метода @Provides следующим образом:
@Module(...)
class MyModule {
@Provides Foo provideFoo() {
return new Foo(); // Foo is not injectable.
}
}
Это похоже на дополнительный шаблон, но из опыта работы с Guice и другими структурами привязка JIT случайных классов оказывается изобилующей ошибкой. Мы увидели, что java.lang.String вводится в вещи, и, поскольку кто-то забыл связать его, вы попали в "" вместо нужной строки. Поэтому для кинжала требуется конструктор @Inject или поле. (Возможно, у Guice это значение в 4.x, хотя для обратной совместимости оно по умолчанию отключено)
Это один редкий случай, когда Кинжал выбрал больше гарантий правильности за счет небольшого количества многословности.