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を破棄してもモジュールは破棄されません。