C# 为什么Caliburn.微型僵尸的观点仍然存在?

C# 为什么Caliburn.微型僵尸的观点仍然存在?,c#,wpf,garbage-collection,caliburn.micro,C#,Wpf,Garbage Collection,Caliburn.micro,我们有一个用Caliburn.Micro 2.0.1编写的应用程序。我们的应用程序上有一个登录视图模型(LoginViewModel)。相关的LoginView在启动时和注销后显示给用户 ViewModel具有一个绑定到LoginView中UI控件的依赖项属性的通知布尔属性,该属性反过来会发送一个事件(使用Message.Attach) 我们突然意识到,如果用户多次登录和注销,代码命中依赖属性回调的次数就会增加。因此,第二次登录时,您会打两次回调,然后在三次登录后打三次,依此类推。最终你会看到它

我们有一个用Caliburn.Micro 2.0.1编写的应用程序。我们的应用程序上有一个登录视图模型(
LoginViewModel
)。相关的
LoginView
在启动时和注销后显示给用户

ViewModel具有一个绑定到
LoginView
中UI控件的依赖项属性的通知布尔属性,该属性反过来会发送一个事件(使用
Message.Attach

我们突然意识到,如果用户多次登录和注销,代码命中依赖属性回调的次数就会增加。因此,第二次登录时,您会打两次回调,然后在三次登录后打三次,依此类推。最终你会看到它再次下降。一些模式,如1、2、3、4、5、3、4、5等就是一个例子

可能正在进行垃圾收集,这解释了为什么经过几次迭代后,数量会下降。然而,我们担心我们做错了什么(或者Caliburn.Micro中可能有bug?)

我们检查了Caliburn.Micro的视图缓存,那里的
LoginView
实例从未超过一个

虽然我们了解Caliburn.Micro可能会在每次激活
LoginViewModel
时重新生成视图,但我们假设DataContext会在视图的旧实例上为空。这似乎没有发生


有什么想法吗?

你在用什么容器吗?Autofac、SimpleContainer、MEF?是的,Autofac和LoginViewModel最初被注入父视图模型。我敢打赌,这是容器注册。您将viewmodel的作用域注册为什么?@mvermef
LoginViewModel
(及其父对象)都注册为
builder.RegisterType().AsSelf()LoginViewModel只构造过一次。您是否使用任何类型的容器?Autofac、SimpleContainer、MEF?是的,Autofac和LoginViewModel最初被注入父视图模型。我敢打赌,这是容器注册。您将viewmodel的作用域注册为什么?@mvermef
LoginViewModel
(及其父对象)都注册为
builder.RegisterType().AsSelf()LoginViewModel只构造一次。