【发布时间】:2014-09-01 10:22:36
【问题描述】:
我们正在使用 Prism 和 Ninject 创建桌面 MVVM 应用程序。此应用程序将提供会话,在这些会话期间应在特定会话下记录数据。我们的视图和视图模型由 Prism 的 IoC 容器创建。我想启动和停止会话,但我不知道如何处理桌面应用程序的 DAL 等部分的范围。
我的想法是正确的,还是应该换个角度思考?我想我可以通过 Prism 中的导航参数传递会话 ID,或者使用 PubSubEvents 消息总线广播会话事件,但这似乎是错误的。
【问题讨论】:
-
一次是否只有一个用户使用应用程序实例?如果是这样,您可以使用自定义范围 (
.InScope(...))。但如果你有一些单例SessionManager来管理当前会话状态(.Start()、.Stop()、.CurrentSessionId...),也许会更好。这样您就不需要重新创建对象图的一部分,而只需管理状态。任何需要知道当前会话的组件只需询问ISessionManager。 -
这似乎是一个不错的解决方案。我可以让 SessionManager 注入必要的工厂,以便为任何感兴趣的人生成会话相关的数据服务。
-
我仍然对如何在桌面应用程序中处理 IoC 范围感兴趣。 Web 开发人员似乎可以轻松处理每个请求的范围。
-
我不太明白你想要达到什么目的。使用桌面应用程序,只能同时有一个用户,对吧?那么你需要什么样的范围呢? Ninject 提供了几种方法来设计您自己的作用域,例如参见github.com/ninject/ninject.extensions.namedscope/wiki。
-
正如我所说的会话范围。也许我只是不了解 IoC 范围的用例,并尝试应用它们来解决错误的事情。
标签: c# mvvm ninject inversion-of-control prism