2

我想通过为 PicoContainer 提供一个工厂方法(如@ProvidesGuice 中的方法)来配置 PicoContainer,以便在每次我(重新)启动容器时创建一个新实例。这里的要点是我需要该实例在每个周期中都是一个单例,换句话说,我希望它被缓存。

4

1 回答 1

1

我找到了解决方案:配置一个FactoryInjector

MutablePicoContainer pico = new PicoBuilder()
      .withCaching()
      .withLifecycle()
      .build();
pico.addAdapter(new FactoryInjector<WebDriver>(){
    @Override
    public WebDriver getComponentInstance(PicoContainer container, Type into) {
        return new FirefoxDriver();
    }
});
pico.start()
d1 = pico.getComponent(WebDriver.class);
d2 = pico.getComponent(WebDriver.class);
assert d1 == d2;
pico.stop();
pico.dispose();
d3 = pico.getComponent(WebDriver.class);
assert d1 != d3;

如您所见,pico 只会在第一次创建一个新实例。停止容器之前的任何后续请求都将返回相同的实例。

于 2017-06-15T08:05:44.737 回答