我是一个通过处理程序调用插件项目的e4应用程序。
public class CTGHandler{
@Execute
public void execute(final EPartService partService, final EModelService modelService){
MPart mPart = modelService.createModelElement(MPart.class);
mPart.setLabel("CTG"); //$NON-NLS-1$
mPart.setContributionURI("bundleclass://plugin.project.ctg/test.project.ctg.CTG");
partService.showPart(mPart, PartState.ACTIVATE);
}
}
在插件方面
public class CTG{
private final Composite parent;
private Scale scale;
@Inject
public CTG(Composite parent){
this.parent = parent;
}
@PostConstruct
public void create(){
scale = new Scale();
Axis x = new Axis(scale);
....
}
}
,Scale类如下所示
public class Scale{
private int x;
@Inject
public Scale(){
x = 10;
}
}
问题:我将scale
作为参数传递给Axis类Axis x = new Axis(scale);
问题:如何在scale对象上使用依赖注入,以便它可用于Axis类或插件项目中的任何其他类,而不将其作为变量传递给构造函数。我尝试在CTG.java和Axis.java中添加@Inject private Scale scale
,但是Axis类没有得到比例值。
答案 0 :(得分:3)
您可以将@Creatable
注释添加到Scale
类,以告知注入器在需要时创建新实例:
@Creatable
public class Scale
{
...
}
如果您只想要Scale
添加@Singleton
的单个实例:
@Creatable
@Singleton
public class Scale
{
...
}
您还可以使用OSGi服务创建单例类,或者将其注入AddOn或LifeCycle类中的上下文。
依赖注入通常仅在Eclipse创建的对象上完成。如果要对创建的对象进行注入,请使用ContextInjectionFactory
创建对象:
@Inject
IEclipseContext context;
...
Axis x = ContextInjectionFactory.make(Axis.class, context);
make
的替代版本可让您添加额外的值:
IEclipseContext staticContext = EclipseContextFactory.create();
staticContext.set(Scale.class, scale);
Axis x = ContextInjectionFactory.make(Axis.class, context, staticContext);