1

私は、派生クラスのいくつかの一般的な機能を備えた抽象プレゼンターを持つ階層を持つ 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);
}
}

すべてのサブクラスが適切に注入されます。ただし、サブクラスのコンストラクターに追加することなく、その特定のフィールドを注入できるようにしたいと考えています。ご覧のとおりフィールド注入を試みましたが、注入されるのはサブクラスであるため機能しません。

サブクラスにフィールドの存在を知らせずに、このインジェクションを達成する適切な方法はありますか?

4

1 に答える 1

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);
 }
}
于 2013-01-28T18:30:39.533 に答える