java - 如何使用 PicoContainer 管理动态依赖项?

标签 java inversion-of-control ioc-container picocontainer

假设我有两个类 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));

但我想为不同的 session 使用不同的 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。

请问有什么好的方法可以实现吗?或者这是一种反模式,我以错误的方式解决了问题?

最佳答案

解决不存在的性能问题不是一个好的方法。您是否进行了任何分析以验证问题?

如果没有,请考虑先这样做。

关于java - 如何使用 PicoContainer 管理动态依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852579/

相关文章:

inversion-of-control - Autofac - 如何从单例中解析 ISomething 的 Func,其中 ISomething 是 InstancePerHttpRequest

c# - 接口(interface)依赖层次结构

c# - 为什么 ViewModelLocator 成员不是静态的

java - Spring DeferredImportSelector 在任何配置之前运行

caSTLe-windsor - 根据 appsetting 值注册组件?

c# - Ninject 2.0 - 绑定(bind)到不止一次使用同一接口(interface)的对象?

java - 在 foreach 循环中选择特定项目?

java - 使用 JZMQ 与 EPGM 传输不发送或接收数据

java - 不幸的是 Sunshine 应用程序无法正常工作

macos - 如何在 Mac OSX 上使用 JDK 7?