GIN-инъекция поля в абстрактном классе

Я работаю в каком-то приложении GWT, в котором у меня есть иерархия, в которой у меня есть абстрактный презентатор с некоторыми общими функциями производных классов. Что-то вроде:

public abstract class MyAbstractPresenter<T extends MyAbstractPresenter.CustomDisplay> extends Presenter<T>
{
public interface CustomDisplay extends View
{
  //some methods
}

//I want to inject this element
@Inject
private CustomObject myObj;

public MyAbstractPresenter(T display)
{
   super(display);
}
}

Все подклассы вводятся правильно. Тем не менее, я хочу иметь возможность ввести это конкретное поле, не добавляя его в конструктор подклассов. Я пытался сделать инъекцию поля, как вы видите, но это не работает, поскольку это подклассы, которые вводятся.

Есть ли правильный способ достичь этой инъекции, не сообщая подклассам о существовании поля?

1 ответ

Решение

По-видимому, на данный момент нет поддержки этого типа поведения в GIN. Обходной путь может заключаться в том, чтобы ввести обязательное поле в конструкторы конкретных классов, даже если оно им не нужно. Что-то вроде:

 public abstract class MyAbstractPresenter<T extends MyAbstractPresenter.CustomDisplay> extends Presenter<T>
 {
   public interface CustomDisplay extends View
   {
     //some methods
   }

   //I wanted to inject this element
   private final CustomObject myObj;

   public MyAbstractPresenter(T display, CustomObject obj)
   {
      super(display);
      myObj = obj;
   }
}

Тогда в любом классе, который расширяет эту абстрактную реализацию, мне пришлось бы передать ее на конструкцию.

public abstract class MyConcretePresenter extends MyAbstractPresenter<MyConcretePresenter.CustomDisplay>
{
  public interface CustomDisplay extends MyAbstractPresenter.CustomDisplay
  {
     //some methods
  }

 @Inject  //it would get injected here instead.
 public MyConcretePresenter(CustomDisplay display, CustomObject obj)
 {
     super(display, obj);
 }
}
Другие вопросы по тегам