Java 类未在IEclipseContext中注入

Java 类未在IEclipseContext中注入,java,dependency-injection,eclipse-rcp,e4,Java,Dependency Injection,Eclipse Rcp,E4,由于我是EclipseRCP新手,所以我在做一本书中的练习。下面是我在做这个练习时面临的问题 我在Eclipse4项目中有一个名为“SnippetRepository”的类 public class SnippetRepository { public ArrayList<SnippetData> snippets = new ArrayList<>(); public String repositoryPath; public Snippet

由于我是EclipseRCP新手,所以我在做一本书中的练习。下面是我在做这个练习时面临的问题

我在Eclipse4项目中有一个名为“SnippetRepository”的类

public class SnippetRepository {

    public ArrayList<SnippetData> snippets = new ArrayList<>();
    public String repositoryPath;

    public SnippetRepository() {
        super();
        // TODO Auto-generated constructor stub
    }
}
由于“SnippetRepository”类未被注入到上下文中,上述方法生成空指针异常

我在Activator类中包含了一个“SnippetRepository”类的对象

@Override
    public void start(BundleContext context) throws Exception {
        // TODO Auto-generated method stub
        IEclipseContext ctx = E4Workbench.getServiceContext();
        SnippetRepository repository = new SnippetRepository();
        ctx.set(SnippetRepository.class, repository);

    }
这是我得到的线索

org.eclipse.e4.core.di.InjectionException:无法处理“SnippetListView#onAddNewSnippet()”:未找到参数“SnippetRepository”的实际值。
位于org.eclipse.e4.core.internal.di.InjectorImpl.ReportUnsolvedArgument(InjectorImpl.java:424)
位于org.eclipse.e4.core.internal.di.InjectorImpl.resolveRequestorArgs(InjectorImpl.java:415)
位于org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:110)
位于org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:345)
位于org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:264)
位于org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
位于org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104)
位于org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:73)
位于org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:55)
位于org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:971)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:640)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:746)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:717)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:711)
位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:695)
位于org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
位于org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:151)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:654)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:746)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:717)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:711)
位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:695)
位于org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
位于org.eclipse.e4.ui.workbench.renders.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:49)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:654)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:746)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:717)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:711)
位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
位于org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:695)
位于org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82)
位于org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer$1.handleEvent(LazyStackRenderer.java:72)
位于org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
位于org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:186)
位于org.eclipse.swt.widgets.Display.syncExec(Display.java:4761)
位于org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:211)
位于org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
位于org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
位于org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
位于org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
位于org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
位于org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
位于org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
位于org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
位于org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
位于org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:85)
位于org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
位于org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
位于org.eclipse.e4.ui.model.application.ui.advanced.impl.PerspectiveStackImpl.setSelectedElement(PerspectiveStackImpl.java:135)
位于org.eclipse.e4.ui.model.application.ui.advanced.impl.Per
@Override
    public void start(BundleContext context) throws Exception {
        // TODO Auto-generated method stub
        IEclipseContext ctx = E4Workbench.getServiceContext();
        SnippetRepository repository = new SnippetRepository();
        ctx.set(SnippetRepository.class, repository);

    }
@Creatable
@Singleton
public class SnippetRepository {
  ...
}
@Inject @Optional
public void onAddNewSnippet(
        @UIEventTopic(CodeSnippetAppConstants.NEW_SNIPPET_EVENT) Object Data,
        SnippetRepository repository){
        ...
}