2013-03-06 4 views
0

У меня есть приложение 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 не располагает модуль.

ответ

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. Модуль должен существовать до тех пор, пока не будет выполняться apllication (по крайней мере, в моем случае), поэтому все выделенные ресурсы в любом случае освобождаются при закрытии приложения.

Смежные вопросы