blog220126.Eclipse e4之service与IEclipseConext
本文以eclipse 4.20为参考.
缘起
org.eclipse.e4.core.context为e4提供context功能, 本文简称e4context.
所谓context, 其主要目的是实现this代码与container(即application framework)的隔离. 也就是说, this代码同e4context打交道, 而不是同container. this和container共同维护e4context.
具体说, e4context的用途有,
- 保存信息obj的场所
- 不同user间传递信息的场所. 例如MPart obj获得MWindow obj信息.
- 与container交换信息的场所
e4context的结构要点,
- 大体相当与一个map<String, obj>, 可以按String name查取object.
- 多个e4context可以组成树状层次结构, 支持上溯查取obj
- 通常由e4workbench创建e4context树的root node, 使用EclipseContextOSGi. 其它node使用EclipseContext.
e4context的核心接口有两个IEclipseContext和MContext, 如下.
public interface IEclipseContext {
String TOPIC_DISPOSE = "org/eclipse/e4/core/contexts/IEclipseContext/DISPOSE";
boolean containsKey(String name);
boolean containsKey(Class<?> clazz);
Object get(String name);
<T> T get(Class<T> clazz);
Object getLocal(String name);
<T> T getLocal