我们正在使用Prism和Ninject创建桌面MVVM应用程序。此应用程序将以会话为特色,在此期间应在特定会话下记录数据。我们的Views和ViewModel由Prism的IoC容器创建。我想开始和停止会话,但我不知道如何处理诸如桌面应用程序的DAL之类的部分的作用域。
我是在朝着正确的方向思考,还是应该以不同的方式思考它?我想我可以使用PubSubEvents消息总线通过Prism中的导航参数或广播会话事件传递会话ID,但这似乎不对。
答案 0 :(得分:1)
在桌面应用程序中使用IoC容器时,您没有Web应用程序中的Scope。每个WebRequest或每个会话的范围都不可用。
所以你必须使用另一种范围,比如pero Thread Scope。或者,如果您有特殊要求,则可以创建自定义范围,以便确定它何时开始以及何时完成。 https://github.com/ninject/ninject/wiki/Object-Scopes
答案 1 :(得分:0)
通常是一个'会话'在网络术语中可以被视为等同于工作单位'。我希望您尝试在桌面应用程序中实现相同级别的范围。
如果是这样,您需要定义您认为是单个工作单元的准确度量。在网络世界中,可以认为用户请求进入(即点击提交按钮)与发回的结果(即更新屏幕)之间发生的一切。
据我所知,Ninject支持网络中的每个请求会话,通过缓存程序化魔术来处理请求的持续时间,为给定用户缓存对象。
如果您决定将相同的会话度量应用于桌面应用程序,则需要引入一个层,该层在任何用户页面交互上触发会话启动,并结束对反馈给它们的结果的会话。
不幸的是,我没有为您提供全面的解决方案,但希望能让您走上正确的道路。