我正在使用Caliburn.Micro v2
和Autofac
,我遇到了WindowManager.ShowDialog
函数的一些问题。
我有以下成功显示dialog
:
windowManager.ShowDialog(dialogViewModel.Show(typeToShow));
如果在通过cross
按钮关闭新显示的窗口后,我记得以上期望再次看到dialog
,我遇到以下异常:
窗口关闭后,无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle。
我的理解是错误是由于ShowDialog
只能使用一次而且如果我想再次调用ShowDialog
,我需要提供一个新实例。我在某种程度上证明了这一点:
windowManager.ShowDialog(new DialogViewModel().Show(typeToShow));
每次成功生成一个新的dialog
,但是,我不希望每次都在这里调用new
。因此,我如何告诉Autofac
每次给我一个DialogViewModel
的新实例,而不是重复使用同一个实例?
编辑1 - DialogViewModel注册
var buider = new ContainerBuilder();
builder.Register(e => new DialogViewModel())
.AsSelf()
.InstancePerDependency();
我之前一直在使用.SingleInstance()
,并且认为使用.InstancePerDependency()
可能就是我想要的,但它似乎并非如此。
答案 0 :(得分:1)
Autofac通过Func<T>
课程提供内置工厂支持。您只需要解析Func<DialogViewModel>
而不是DialogViewModel
,这意味着工厂会返回DialogViewModel
。您不需要更改现有注册。有关wiki page.