Spring.Net中的多个上下文

时间:2011-08-31 16:50:38

标签: c# initialization ioc-container spring.net

在调用其他上下文时,是否可以在spring.Net中并行创建多个上下文?

<spring>
 <context>
  <context name="A">
   <!-- ... some objects might be created here -->
  </context>
  <context name="B">
   <!-- ... some objects might be created here -->
  </context>
 </context>
</spring>

Spring.Net中的奇怪之处在于,即使我为特定的上下文调用GetContext() (例如GetContext("A"))创建所有对象(即使是在我调用A时来自B的对象)。

var ctx = ContextRegistry.GetContext("A");
var my = (MyClass)ctx.GetObject("MyObject"); // where MyObject is in context A

我可以在调用GetObject()时明确地执行延迟初始化,但可能有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,应该在初始化上下文时急切地实例化单例,并在应用启动时将其添加到注册表中,这样我就可以确定来自Context“B”的非延迟对象早在您实例化之前就已经实例化了在任一Context上调用GetObject()(即,当您进行任何GetObject()调用IIRC时,急切的实例化根本不相关。)

AFAIK,实现你所追求的东西的唯一方法确实是为整个Context“B”设置默认的lazy为true,或者在Context中逐个对象地指示lazy = true “B”。