A と B の 2 つのクラスがあり、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
ため、機能しません。 はそこにありますが、とその親内でのみ解決され、B
root
B
root
UnsatisfiableDependenciesException.
これを機能させる良い方法はありますか?それとも、これはアンチパターンであり、間違った方法で問題を解決していますか?