gpt4 book ai didi

dispose - 如何处理与 Caliburn Micro 一起使用的 Autofac 容器

转载 作者:行者123 更新时间:2023-12-01 05:32:57 25 4
gpt4 key购买 nike

我有一个 Winforms 菜单项,单击时会显示 WPF 表单。 WPF 表单使用 Caliburn Micro,使用 Autofac 引导。

最近我突然想到,Caliburn Bootstrap 解决了根 Autofac 容器的依赖关系。因此,这些依赖项(例如,具有 1000 个要绑定(bind)到网格的数据项的 View 模型)永远不会被释放。

我想使用 Autofac 生命周期容器来管理处置,但是,我不确定如何使用 Caliburn 执行此操作。最初,我想为每个打开的 WPF 表单实例化一个 Caliburn Bootstrap (带有自己的 Autofac 生命周期容器)。然后,当表单被释放时, Bootstrap 可以被释放(以及生命周期容器)。

但是,从查看 Caliburn 源代码来看,似乎应该为整个应用程序创建一个 Bootstrap 。这是因为实例化 Bootstrap 似乎分配了静态字段来处理 UI 编码(也许还有其他我可能没有看到的东西)。

是否有人对关闭 WPF 表单时如何处理依赖项有任何建议/建议?

最佳答案

我目前正在使用以下内容发布从 CaSTLe 解析的 View 模型(直到出现更好的东西!)。我不熟悉 AutoFac,但也许这种方法可能有用。在您的 Bootstrap 中:

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...
}
}

关于dispose - 如何处理与 Caliburn Micro 一起使用的 Autofac 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com