簡體   English   中英

Eclipse 4 RCP沒有將對象注入我的班級

[英]Eclipse 4 RCP did not inject object to my class

我試圖將對象注入到我自己的類( OpenProjectItemHandler )中,如下所示。 但是注入的對象( eventBroker )為null。 我們如何注入物體?

public class ProjectExplorerPart {

    protected TreeViewer viewer;

    //@Inject IEventBroker eventBroker;

    @PostConstruct
    public void createComposite(Composite parent) {
        //...
        viewer.addDoubleClickListener(new OpenProjectItemHandler());

        //...
    }
}


public class OpenProjectItemHandler implements IDoubleClickListener {

    @Inject IEventBroker eventBroker;

    @Override
    public void doubleClick(DoubleClickEvent event) {
            //...
            //IEclipseContext eclipseContext = E4Workbench.getServiceContext();
            //eventBroker = eclipseContext.get(IEventBroker.class);
            eventBroker.send("ta/project_explorer/open_item", Collections.EMPTY_LIST);
        }
    }
}

使用new創建的對象不會被注入。 您需要使用ContextInjectionFactory.make來創建對象。

public class ProjectExplorerPart {

  protected TreeViewer viewer;

  @PostConstruct
  public void createComposite(Composite parent, IEclipseContext context) {
    //...

    OpenProjectItemHandler handler
        = ContextInjectionFactory.make(OpenProjectItemHandler.class, context);

    viewer.addDoubleClickListener(handler);

    //...
  }
}

另一個選擇是使用@Creatable注釋來注釋要注入的類,如下所示:

@Creatable
@Singleton
public class OpenProjectItemHandler implements IDoubleClickListener {
   ...
}

然后在框架管理的對象中使用標准注入來注入實例

public class ProjectExplorerPart {
   @Inject private OpenProjectItemHandler opih;
   @PostConstruct
   public void createComposite(Composite parent) {
    //...
    viewer.addDoubleClickListener(opih);
    //...
   }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM