实例生命周期管理

时间:2014-06-16 21:30:59

标签: autofac caliburn.micro

我正在使用Caliburn.Micro v2Autofac,我遇到了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()可能就是我想要的,但它似乎并非如此。

1 个答案:

答案 0 :(得分:1)

Autofac通过Func<T>课程提供内置工厂支持。您只需要解析Func<DialogViewModel>而不是DialogViewModel,这意味着工厂会返回DialogViewModel。您不需要更改现有注册。有关wiki page.

的更多信息