Внедрение зависимостей платформы Play не работает

#java #dependency-injection #playframework

#java #внедрение зависимостей #playframework

Вопрос:

Я попробовал пример внедрения зависимостей отсюда https://dzone.com/articles/guicing-play-framework

Ниже приведен мой контроллер кода:

 public class TestController extends Controller{
  @Inject
  private Testing test;

  public Result result() {
    test.tt();
    return ok();
  } 
}
 

Код интерфейса сервиса:

 public interface Testing {
  public String tt();
}
 

Код ServiceImpl:

 public class Testingimpl implements Testing{
  @Override
  public String tt() {
    return "test";
  }
}
 

Я получаю эту ошибку

Исключение CreationException: Не удалось создать инжектор

Если я сделаю это, это сработает.

 public class TestController extends Controller{
  @Inject
  private TestingImpl test;

  public Result result() {
    test.tt();
    return ok();
  } 
}
 

Как решить эту проблему?

Ответ №1:

Вы забыли привязать интерфейс к своей реализации. Если у вас есть одна реализация, измените свой интерфейс следующим образом:

 import com.google.inject.ImplementedBy;

@ImplementedBy(Testingimpl.class)
public interface Testing {
    public String tt();
}
 

Для более сложного решения вы можете использовать программные привязки: https://www.playframework.com/documentation/2.7.x/JavaDependencyInjection#Programmatic-bindings