У меня есть приложение WPF, которое разделено на модули PRISM.Одноразовый модуль Wpf PRISM
У меня есть служба, которая занимается с некоторыми неуправляемыми ресурсами, поэтому он реализует IDisposable интерфейса:
public class MyCacheService : IMyCacheService, IDisposable
{
...
}
У меня также есть CameraServicesModule, который регистрирует экземпляр IMyCacheService:
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 не располагает модуль.