Castle Windsor瞬态生活方式未激活

时间:2010-07-04 00:04:31

标签: dependency-injection inversion-of-control castle-windsor

我的容器中有一个Transient生活方式的组件有问题。我第一次调用resolve时,按预期命中了实现类型的构造函数。

但是,第二次调用resolve时,不会构造新实例。而是重用现有实例。我不认为这应该发生,因为我的组件的LifestyleType设置为Transient(我已经在调试模式下在断点处验证了这一点):

Kernel.GetAssignableHandlers(typeof(object))[33].ComponentModel.LifestyleType 
// 33 is the verified index of my component type...this returns Transient as expected

在同一断点处,我在即时窗口中运行了以下内容并验证未构造新实例:

  Resolve(Kernel.GetAssignableHandlers(typeof(object))[33].Service)
  // this does NOT return a new instance!
  // ...It returns the same instance from the first time Resolve was called. 
  // I can tell by the state of the object and because the constructor on the object is not called.

更新

我认为我把问题缩小了。

以下测试失败:

    var container = new WindsorContainer();
    container.Kernel.AddComponent<MyLazyComponentLoader>(typeof (ILazyComponentLoader));

    var instance1 = container.Resolve<MyClass>();
    var instance2 = container.Resolve<MyClass>();

    Assert.AreNotSame(instance1, instance2);

MyLazyComponentLoader只返回 Component.For(服务)

默认为Singleton LifestyleType(即使它在ComponentModel上显示为Unknown。这是设计的吗?

感谢。

1 个答案:

答案 0 :(得分:0)

PerKrzysztofKoźmic:是的,默认的生活方式是单身,未知意味着没有明确指定,但Windsor将其视为您指定的Singleton。如果你想要它是瞬态的,那就明确一点。