如何在Cucumber Java的Pico Container中构造带参Client并注入
在Pico Container中注入带参数的共享Client实例
你需要显式告诉Pico Container如何构建Client实例——因为它没有默认构造函数且无法修改。下面提供两种可行的配置方式,确保所有步骤定义类都能注入同一个共享的Client实例:
方法一:直接注册预创建的实例
先手动创建Client实例,再将其注册到容器中作为单例组件,容器会自动将这个实例注入到所有依赖它的类中:
// 初始化共享的Client实例 Client sharedClient = new Client("api-key"); // 创建并配置Pico容器 MutablePicoContainer container = new DefaultPicoContainer(); // 注册Client实例,指定类型以便容器识别依赖 container.addComponent(Client.class, sharedClient); // 注册你的步骤定义类 container.addComponent(FirstStepDefinition.class); // 获取实例时,Client会自动注入 FirstStepDefinition firstStep = container.getComponent(FirstStepDefinition.class);
方法二:通过工厂方法注册
如果需要延迟创建或通过特定逻辑构建Client,可以将工厂方法注册到容器,容器会调用该方法创建实例并维护为单例:
MutablePicoContainer container = new DefaultPicoContainer(); // 注册Lambda形式的工厂方法,返回Client实例 container.addComponent(Client.class, () -> new Client("api-key")); // 注册步骤定义类 container.addComponent(FirstStepDefinition.class); // 获取实例时自动注入Client FirstStepDefinition firstStep = container.getComponent(FirstStepDefinition.class);
两种方式都会保证容器内只有一个Client实例,所有依赖它的步骤定义类都会注入同一个实例,满足你的共享需求。
内容的提问来源于stack exchange,提问作者Andy Tang
相关产品推荐
相关产品推荐

