Wpf PRISM一次性模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wpf PRISM一次性模块相关的知识,希望对你有一定的参考价值。
我有一个分为PRISM模块的WPF应用程序。
我有一个处理一些非托管资源的服务,因此它实现了IDisposable接口:
public class MyCacheService : IMyCacheService, IDisposable
{
...
}
我还有一个注册IMyCacheService实例的CameraServicesModule:
public class CameraServicesModule : IModule
{
public CameraServicesModule(IComponentsManager manager)
{
this.manager = manager;
}
public void Initialize()
{
...
var theCacheService = new MyCacheService();
this.manager.RegisterInstance(typeof(IMyCacheService), null, theCacheService);
}
}
问题是:我如何处置服务实例?我必须在应用程序关闭时执行此操作,但是现在不会在应用程序关闭(或任何其他时间点)调用MyCacheService.Dispose()。
CameraServicesModule也应该实现IDisposable吗?像这样:
public class CameraServicesModule : IModule, IDisposable
{
public CameraServicesModule(IComponentsManager manager)
{
this.manager = manager;
}
public void Initialize()
{
...
this.theCacheService = new MyCacheService();
this.manager.RegisterInstance(typeof(IMyCacheService), null, theCacheService);
}
public void Dispose()
{
this.theCacheService.Dispose();
}
}
如果是这样,问题是:我该如何处理模块?如果没有,问题是:我应该采用哪种方式提供服务?
LocalFileSystemConfigurationManager configManager = new LocalFileSystemConfigurationManager(this.PathToSettings);
ComponentsManager compManager = new ComponentsManager(configManager, null, null);
注意:即使我的模块实现了IDisposable,处理componentsManager或configurationManager也不会处理该模块。
好的,在咨询了一些高级开发人员后,我得出结论,处理服务的最合适的方法是在创建服务实例的模块上实现IDisposable:
public class CameraServicesModule : IModule, IDisposable
{
public CameraServicesModule(IComponentsManager manager)
{
this.manager = manager;
}
public void Initialize()
{
...
this.theCacheService = new MyCacheService();
this.manager.RegisterInstance(typeof(IMyCacheService), null, theCacheService);
}
public void Dispose()
{
this.theCacheService.Dispose();
}
}
虽然模块实现了IDisposable,但我们可以保持原样,无需手动调用Dispose。该模块应该存在,直到应用程序工作(至少在我的情况下),因此所有分配的资源无论如何都会在应用程序关闭时释放。
以上是关于Wpf PRISM一次性模块的主要内容,如果未能解决你的问题,请参考以下文章
使用 Prism 的 Wpf 中模块之间的 ApplicationCommands 问题
Prism/MVVM (MEF/WPF):从模块中公开导航 [例如菜单]
2021-10-13 WPF上位机 64-Prism框架模块化(Module,Dialog)
使用 WPF / Prism 在应用程序退出/崩溃时处理对象实例