我有一个Winforms菜单项,单击时会弹出一个WPF表单。 WPF表单使用Caliburn Micro,使用Autofac进行自举。
最近我发现Caliburn引导程序解析了根Autofac容器的依赖关系。因此,这些依赖项(例如,包含1000个数据项的视图模型将被绑定到网格)永远不会被丢弃。
我想使用Autofac lifetimescope容器来管理配置,但是,我不知道如何使用Caliburn来实现这一点。最初,我想为每个打开的WPF表单实例化一个Caliburn引导程序(带有自己的Autofac lifetimescope容器)。然后,当放置模板时,可以放置自举器(和带有它的寿命镜容器)。
但是,从查看Caliburn源代码来看,似乎只应为整个应用程序创建一个引导程序。这是因为实例化引导程序似乎分配静态字段来处理UI编组(也许还有其他我可能没见过的事情)。
当WPF表单关闭时,有没有人对如何处理依赖项有任何建议/建议?
答案 0 :(得分:1)
我目前正在使用以下内容来发布从Castle解决的视图模型(直到更好的方式出现!)。我不熟悉AutoFac,但也许这种方法可能有用。在你的引导程序中:
protected override object GetInstance(Type serviceType, string key)
{
// Get the instance from the container
...
// If it's activatable, monitor it so we can release when closed.
IDeactivate activatable = result as IDeactivate;
if (activatable != null)
{
activatable.Deactivated += activatable_Deactivated;
}
return result;
}
void activatable_Deactivated(object sender, DeactivationEventArgs e)
{
if (e.WasClosed)
{
((IDeactivate)sender).Deactivated -= activatable_Deactivated;
container.Release(sender); // or whatever AutoFac equivalent is...
}
}