如何使用依赖注入添加构造函数参数
How can I add constructor params using Dependency Injection
我正在尝试执行以下操作。如果可能的话,我想避免使用 'new' 关键字创建它们,并依赖于依赖注入。在以下情况下这可能吗?
public class One {
@Inject
private Two two;
@PostConstruct
public void createComposite(final Composite parent) {
final Composite container = doSomethingWithParent(parent);
// How do I call Twos constructor using injection and pass it the value for container?
// new Two(context, container);
}
}
@Creatable
@Singleton
public class Two
@Inject
public Two(final IEclipseContext context, final Composite containerFromOne) {
context.set(Two.class.getName(), this);
doSomethingImportantThatNeedsComposite(containerFromOne);
}
}
public class Three
@Inject
private Two two;
// I would like be able to use two anywhere in this class
// once two is instantiated by One
}
我也在看 ContextInjectionFactory.make() 但我没有看到传递构造函数参数的方法。
您可以使用带有两个 IEclipseContext
参数的变体来使用 ContextInjectFactory.make
。第二个 IEclipseContext
是一个临时上下文,您可以在其中放置额外的参数。类似于:
IEclipseContext tempContext = EclipseContextFactory.create();
tempContext.set(Composite.class, composite);
// ... more parameters
Two two = ContextInjectionFactory.make(Two.class, context, tempContext);
注意:您不使用 @Creatable
和 @Singleton
注释。
创建后,您可以将其放入 Eclipse 上下文中:
context.set(Two.class, two);
请注意,可以有多个 Eclipse 上下文。您可能需要找到正确的。
我正在尝试执行以下操作。如果可能的话,我想避免使用 'new' 关键字创建它们,并依赖于依赖注入。在以下情况下这可能吗?
public class One {
@Inject
private Two two;
@PostConstruct
public void createComposite(final Composite parent) {
final Composite container = doSomethingWithParent(parent);
// How do I call Twos constructor using injection and pass it the value for container?
// new Two(context, container);
}
}
@Creatable
@Singleton
public class Two
@Inject
public Two(final IEclipseContext context, final Composite containerFromOne) {
context.set(Two.class.getName(), this);
doSomethingImportantThatNeedsComposite(containerFromOne);
}
}
public class Three
@Inject
private Two two;
// I would like be able to use two anywhere in this class
// once two is instantiated by One
}
我也在看 ContextInjectionFactory.make() 但我没有看到传递构造函数参数的方法。
您可以使用带有两个 IEclipseContext
参数的变体来使用 ContextInjectFactory.make
。第二个 IEclipseContext
是一个临时上下文,您可以在其中放置额外的参数。类似于:
IEclipseContext tempContext = EclipseContextFactory.create();
tempContext.set(Composite.class, composite);
// ... more parameters
Two two = ContextInjectionFactory.make(Two.class, context, tempContext);
注意:您不使用 @Creatable
和 @Singleton
注释。
创建后,您可以将其放入 Eclipse 上下文中:
context.set(Two.class, two);
请注意,可以有多个 Eclipse 上下文。您可能需要找到正确的。