Wpf PRISM一次性模块

问题描述 投票:0回答:1

我有一个分为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也不会处理该模块。

wpf prism design-patterns idisposable prism-4
1个回答
0
投票

好的,在咨询了一些高级开发人员后,我得出结论,处理服务的最合适的方法是在创建服务实例的模块上实现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。该模块应该存在,直到应用程序工作(至少在我的情况下),因此所有分配的资源无论如何都会在应用程序关闭时释放。

© www.soinside.com 2019 - 2024. All rights reserved.