2

我正在尝试将 E3.X 应用程序移植到 E4 并遵循 Lars Vogel 的教程。我创建了一个视图包装器,它扩展了 DIViewPart 类,视图本身在构造函数上使用依赖注入,并在我的 plugin.xml 中引用了视图包装器。

但是,在启动应用程序时会引发异常:

org.eclipse.e4.core.di.InjectionException:在 my.application.views.MyView 中找不到可满足的构造函数

即使经过几个小时的谷歌搜索,我也不知道出了什么问题。也许我只是在寻找错误的东西,但我现在一无所知。如果有人能指出我缺少的东西,我会很高兴。

只是为了确保我在下面附加了受影响的视图源代码:

公共类 MyViewWrapper 扩展 DIViewPart {

    公共 MyViewWrapper() {
        超级(MyView.class);
    }

}
公共类 MyView {

    公共静态最终字符串 ID = MyView.class.getCanonicalName();

    自有品牌标签;

    @注入
    公共MyView(复合父){
        this.label = new Label(parent, SWT.NONE);
        this.label.setText("我的观点");      
    }

}

任何帮助表示赞赏并提前感谢。

编辑: Stefan 指出,这个问题可能与 e4 在构造函数调用期间不知道正确的组合这一事实有关,并且以下代码应该可以解决问题:

公共类 MyView {

    公共静态最终字符串 ID = MyView.class.getCanonicalName();

    自有品牌标签;

    公共 MyView() { }

    @PostConstruct
    公共无效createPartControl(复合父){
        this.label = new Label(parent, SWT.NONE);
        this.label.setText("传感器视图");              
    }

}

可悲的是,情况并非如此。异常发生了变化,但原因可能仍然相同:

org.eclipse.e4.core.di.InjectionException:找不到匹配的方法来调用

我的假设是依赖注入作为一个整体不能正常工作,但我不知道为什么,因为我所做的一切都与我找到的教程中的完全一样。我需要添加 .e4xmi 吗?

4

1 回答 1

0

我遇到了和你一样的情况,通过调试代码找到了解决办法。

查看您的堆栈跟踪,更具体地说是在第org.eclipse.e4.core.internal.di.InjectorImpl213 行附近的类。该invoke方法接收一个限定符参数,该参数是错误消息中提到的匹配方法的目标。这个量词是依赖注入正在寻找的。

例如,在我的例子中,量词参数是一个@Focus注释。因此,通过在MyView@Focus类中的正确方法上添加注释,我能够摆脱您描述的第二个问题,因为 DI 找到了要调用的正确匹配方法。

我知道这是对几个月前提出的问题的迟到回答,但我认为这可以帮助其他人在不花费太多时间的情况下进行调试。

于 2013-12-03T02:45:20.740 回答