如何使用依赖注入添加构造函数参数

时间:2015-12-02 19:14:07

标签: java dependency-injection rcp eclipse-rap

我正在尝试执行以下操作。如果可能的话,我想避免使用' 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(),但我没有看到传递构造函数参数的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用带有两个ContextInjectFactory.make参数的变体IEclipseContext。第二个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上下文。您可能需要找到正确的一个。