假设我有两个班级 A 和 B,其中 B 取决于 A。
public class A {}
public class B {
public B(A a) {}
}
在单个 PicoContainer 中解析 B 很容易。
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(new A());
root.addComponent(B.class, B.class);
System.out.println(root.getComponent(B.class));
但我想B
为不同的会话提供不同的实例,并使用A
. 我正在考虑这样的事情。
// during startup
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(B.class, B.class);
// later, initialize sessions
final MutablePicoContainer session = new PicoBuilder(root)
.implementedBy(TransientPicoContainer.class)
.build();
session.addComponent(new A());
// some request
System.out.println(session.getComponent(B.class));
上面的代码不起作用,因为当请求session
a时,B
它会向父容器root
请求它。 B
在那里找到,但只在内部root
和它的父母中解决,导致UnsatisfiableDependenciesException.
有什么好的方法可以使这项工作吗?或者这是一种反模式,我以错误的方式解决问题?