2017-06-14 63 views
1

我希望通过为PicoContainer提供一种工厂方法(如Guice中的@Provides方法)来配置PicoContainer,以在每次重新启动容器时创建一个新实例。这里的要点是我需要这个实例在每个循环中成为一个单例,换句话说,我希望它被缓存。使用具有缓存行为的工厂方法配置PicoContainer

回答

0

我找到了解决办法:配置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; 

正如你所看到的,微微将创建一个新的实例只在第一次。在停止容器之前的任何后续请求都将返回完全相同的实例。