我正在使用Prism和MVVM模式
我有一个在我的容器中注册的存储库中运行的服务,如下所示:
_container.RegisterType<ITheService, TheService>();
_container.RegisterType<IRepository<Order>, Repository>(new ContainerControlledLifetimeManager());
存储库的构造函数将订阅该服务,然后该服务将接收新元素(例如每秒5到10个)。 问题是,由于这个订阅,当我关闭我的GUI窗口时,持有服务的模块没有关闭,服务继续运行,而不是被dispose关闭。
如果我不在MVVM中,我会在关闭窗口时取消该服务,但shell窗口不能这样做。
我看到2个解决方案 *有一个eventaggregator,可以让我的存储库知道shell何时关闭,然后取消订阅服务(不确定它会工作) *从shell解析存储库(因为它已注册为单例),并在服务时取消订阅,但这将非常难看......
答案 0 :(得分:0)
所以我尝试了我的第一个想法,即使用EventAggregator。
当触发Closed事件时,shell会在EventAggregator中发布一个事件。 持有该服务的存储库已订阅该事件,并在shell关闭时收到通知。所以我只需要在收到通知时关闭服务......