一般来说想要去除Eclipse Plugin之间的循环依赖 ,这里介绍两种方法:
第一定义一个Extension Point,简单的就是在可以定义两个属性name, class;name用来指明实现这个扩展点的名称,class就是要实现这个扩展点要实现的公共接口.然后可以在其他Plugin中实现一个Extension Point.如果要实现这个实例就可以使用
的到所有的实现这个扩展点的Element再利用Object service = element.createExecutableExtension("class");就可以的得到你要的实例对象.
第二种方法就是利用Plugin种的BundleContext,这样的话首先在你要被引用的Plugin 的
在这你要使用的地方用;
第一定义一个Extension Point,简单的就是在可以定义两个属性name, class;name用来指明实现这个扩展点的名称,class就是要实现这个扩展点要实现的公共接口.然后可以在其他Plugin中实现一个Extension Point.如果要实现这个实例就可以使用
IExtensionRegistry registry
=
Platform.getExtensionRegistry();
elements = registry.getConfigurationElementsFor(extension point ID);
elements = registry.getConfigurationElementsFor(extension point ID);
的到所有的实现这个扩展点的Element再利用Object service = element.createExecutableExtension("class");就可以的得到你要的实例对象.
第二种方法就是利用Plugin种的BundleContext,这样的话首先在你要被引用的Plugin 的
public
void
start(BundleContext context)
throws
Exception
{
super.start(context);
//注册一个IWarehousePluginService接口的实例.
context.registerService(IWarehousePluginService.class.getName(),
new WarehousePluginService(), null);
}
super.start(context);
//注册一个IWarehousePluginService接口的实例.
context.registerService(IWarehousePluginService.class.getName(),
new WarehousePluginService(), null);
}
在这你要使用的地方用;
public
IWarehousePluginService getWarehouseService()
{
ServiceReference reference = context
.getServiceReference(IWarehousePluginService.class.getName());
return (IWarehousePluginService) context.getService(reference);
}
ServiceReference reference = context
.getServiceReference(IWarehousePluginService.class.getName());
return (IWarehousePluginService) context.getService(reference);
}