Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 视图生命周期与视图注入-PRISM_Wpf_Prism_Region - Fatal编程技术网

Wpf 视图生命周期与视图注入-PRISM

Wpf 视图生命周期与视图注入-PRISM,wpf,prism,region,Wpf,Prism,Region,我正在学习复合应用程序的概念。 我使用unity容器创建了prism应用程序。 我的一个区域配置为内容控制-在这个区域中,我只想显示单个视图 我正在以下一种方式使用视图注入: object lastView; // View injection IRegion region = regionManager.Regions["MainRegion"]; var ordersView = container.Resolve<OrdersView>();

我正在学习复合应用程序的概念。 我使用unity容器创建了prism应用程序。 我的一个区域配置为内容控制-在这个区域中,我只想显示单个视图

我正在以下一种方式使用视图注入:

object lastView;

    // View injection
    IRegion region = regionManager.Regions["MainRegion"];

    var ordersView = container.Resolve<OrdersView>();
    lastView = ordersView;
    region.Add(ordersView, "OrdersView");
    region.Activate(ordersView);
对象视图;
//视图注入
IRegion region=regionManager.Regions[“MainRegion”];
var ordersView=container.Resolve();
lastView=ordersView;
添加(ordersView,“ordersView”);
区域。激活(ordersView);
这使得该区域的视图频繁切换。 在Im切换视图之前,Im使用
区域。删除(lastView)
而不是像上面的代码那样添加下一个视图

我不确定这是否是一个良好的实施,我有几个问题: 当我使用region.remove方法时,是否正在处理删除的视图? 因为如果不是在长时间运行之后,我将有严重的内存泄漏。 在避免内存泄漏的同时,在区域中实现单一视图的最佳方法是什么

感谢

由于内存泄漏,我猜您是在谈论垃圾收集器是否将收集该视图-例如,当您删除它时,容器是否仍在引用它

在解析对象后,是否保留该对象的引用取决于注册该对象时使用的类型

简单回答您的问题-与
RegisterType
一起使用的默认生存期管理器是TransientLifetimeManager,其中Unity为每个对Resolve或ResolveAll方法的调用创建所请求类型的新实例

您可能正在寻找的是外部控制的LifetimeManager

此生存期管理器允许您向容器注册类型映射和现有对象,以便当您调用Resolve或ResolveAll方法或依赖机制基于属性或构造函数将实例注入其他类时,容器仅维护对其创建的对象的弱引用该类中的参数。这允许其他代码在内存中维护或处置对象,并允许您保持对现有对象生存期的控制,或允许其他机制控制生存期

如果您想控制视图的生存期,请考虑使用这个生命管理器使用<代码> RealStyType < /C>。 此外,根据-对已解析实例调用Dispose的唯一生存期管理器是ContainerControlled LifetimeManager(创建Singleton实例)和HierarchyCallifetimeManager。在这些情况下,只有在释放生存期管理器时才会调用

Dispose

由于内存泄漏,我猜您指的是垃圾收集器是否将收集该视图-例如,当您删除它时,容器是否仍在引用它

在解析对象后,是否保留该对象的引用取决于注册该对象时使用的类型

简单回答您的问题-与
RegisterType
一起使用的默认生存期管理器是TransientLifetimeManager,其中Unity为每个对Resolve或ResolveAll方法的调用创建所请求类型的新实例

您可能正在寻找的是外部控制的LifetimeManager

此生存期管理器允许您向容器注册类型映射和现有对象,以便当您调用Resolve或ResolveAll方法或依赖机制基于属性或构造函数将实例注入其他类时,容器仅维护对其创建的对象的弱引用该类中的参数。这允许其他代码在内存中维护或处置对象,并允许您保持对现有对象生存期的控制,或允许其他机制控制生存期

如果您想控制视图的生存期,请考虑使用这个生命管理器使用<代码> RealStyType < /C>。 此外,根据-对已解析实例调用Dispose的唯一生存期管理器是ContainerControlled LifetimeManager(创建Singleton实例)和HierarchyCallifetimeManager。在这些情况下,只有在释放生存期管理器时才会调用

Dispose