我的容器中有一个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。这是设计的吗?
感谢。
答案 0 :(得分:0)
PerKrzysztofKoźmic:是的,默认的生活方式是单身,未知意味着没有明确指定,但Windsor将其视为您指定的Singleton。如果你想要它是瞬态的,那就明确一点。