为了账号安全,请及时绑定邮箱和手机立即绑定

E4 无法在类变量上自动注入 MApplication

E4 无法在类变量上自动注入 MApplication

有只小跳蛙 2023-01-05 17:03:15

我有一个 E4 应用程序,我需要将 MApplication 注入到第一个创建的类中。该类本身已在我的 Activator 的启动方法中创建并在那里调用。


我的类称为 FrameworkModule,看起来像:


public class FrameworkModule implements ISubscription {


    private static final Logger logger = LoggerFactory.getLogger(FrameworkModule.class);


    private @Inject IEclipseContext context;

    protected @Inject EPartService partService;


    protected @Inject MApplication application;


    protected @Inject EModelService modelService;

...

}

激活器将创建上述类并运行它的一个方法。激活器的启动方法如下所示:


@Override

    public void start(BundleContext bundleContext) throws Exception {

        Activator.context = bundleContext;


        IEclipseContext eContext = EclipseContextFactory.getServiceContext(bundleContext);


        ExecutorService service = Executors.newSingleThreadExecutor();


        service.execute(() -> {

            framework = ContextInjectionFactory.make(FrameworkModule.class, eContext);

            framework.startup();

        });


        service.execute(() -> CacheUtil.getManager());


        service.shutdown();

    }


如何在我的 FrameworkModule 类中解决这个问题?我在那里需要所有注入的类,但找不到将它放在那里的方法。


查看完整描述

1 回答

?
慕雪6442864

TA贡献1552条经验 获得超5个赞

only返回的服务上下文EclipseContextFactory.getServiceContext内容非常有限,不包括MApplication. 您不能在激活器中创建这样的类。

具体取决于您要如何使用该类,您可以:

  • 在 application.e4xmi 或 fragment.e4xmi 中指定的“附加组件”中创建类

  • 只需让它使用@Creatable类上的注释自动创建即可。@Singleton如果您想要该类的单个实例,也可以使用注释。

  • 在 LifeCycle 类中创建它

  • 使用一个创建它ContextFunction


查看完整回答
反对 回复 2023-01-05

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信