In meinem Bündel Aktivator versuche ich Felder "IEventBroker" und "EPartService" zu injizieren. Aber erst gespritzt. Code folgt:Kann nicht injizieren EPartService
@Inject
IEventBroker m_broker;
@Inject
EPartService m_part_service;
public void start(BundleContext context) throws Exception {
IEclipseContext service_context = EclipseContextFactory.getServiceContext(context);
ContextInjectionFactory.inject(this, service_context);
boolean contains = service_context.containsKey(EPartService.class);
// contains is always "true", but m_part_service is always "null"
// all follows invocations returns "null" too
//
// service_context.get(EPartService.class);
// service_context.getActiveLeaf().getActive(EPartService.class);
// service_context.getActiveLeaf().getLocal(EPartService.class);
// context.getServiceReference(EPartService.class);
// m_broker always non-null
m_broker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler()
{
@Override
public void handleEvent(Event event)
{
// ... bla bla bla
}
});
}
In internen Listen von IEclipseContext fand ich EPartService. Können Sie mir helfen? Was habe ich falsch gemacht?
Vielen Dank für Ihre Antwort. Meine Anwendung hat mit der eigenen config.ini begonnen. In dieser Konfiguration starte ich meine Plugins in der benötigten Reihenfolge. Bundle mit Code oben ist kein Anwendungs-Plugin. Und ich muss einen Teil öffnen, wenn ich eine Nachricht vom TCP-Socket bekomme. Also muss ich EPartService injizieren, um Teile in Klassen zu öffnen, die nicht mit der Benutzeroberfläche zu tun haben. Code mit "m_broker" Ich habe hinzugefügt, um zu zeigen, dass "IEventBroker" -Service wurde injiziert und es ist nicht mit meiner Frage verbunden. Ich brauche EPartService .... – Say
Der Bündelaktivator ist immer noch der falsche Ort. Verwenden Sie ein AddOn, bei dem die Injektion ordnungsgemäß funktioniert. –
Wenn das Plugin nicht das Hauptanwendungs-Plugin ist, benutze ein Fragment.e4xmi für das AddOn –