gpt4 book ai didi

asp.net-mvc - ASP.net MVC : Where to keep application data?

转载 作者:行者123 更新时间:2023-12-02 05:19:37 25 4
gpt4 key购买 nike

我刚刚开始将应用程序移植到 ASP.net MVC,我有一个对象保存应用程序状态(它跟踪机器上运行的某些进程,根据需要启动和停止以及发送/接收 MSMQ 消息)。

我应该把这个对象放在哪里?在我当前的应用程序(基于 HttpListener)中,它是一个单例,但我知道单例使测试变得困难。很难模拟或测试这个对象,至少在 MVC 应用程序本身的上下文中是这样,而且无论如何它在应用程序之外都有自己的一组测试。然而,它可能需要用 stub 替换以进行测试。

该对象需要对多个 Controller 可用。我应该在哪里存储这个对象以及我应该如何让它对 Controller 可用?在我见过的任何 ASP.net MVC 示例中,我从未见过这样的案例。

更新:

我想我需要解释为什么我不能将这些数据存储在数据库中。首先,我必须解释应用程序的作用:

该应用程序提供由许多“引擎”动态生成的图像,这些引擎是在服务器上运行的进程,通过 MSMQ 进行通信。让我们调用我正在询问有关 EngineManager 问题的对象。这个过程是这样的:

  1. 客户端向服务器发送 XML 请求,提供要使用的“引擎”名称,以及一些描述图像的参数。
  2. 应用程序检查 EngineManager 以查看该引擎是否正在运行。如果没有,它会启动它。
  3. 应用程序向引擎发布 MSMQ 消息并等待响应。
  4. 应用程序将生成的图像发送回客户端。
  5. 如果引擎在任何时候关闭或崩溃,应用程序必须知道这一点,以便它可以在下一个对该引擎的请求时重新启动。
  6. 当应用程序关闭时,所有引擎也会关闭。

有多个 Controller 处理这些请求,每个 Controller 的工作略有不同。它们都需要与同一个 EngineManager 通信,因为在某些情况下它还需要同步对其他资源的访问。

如您所见,它不是典型的数据库支持的网络服务器。

最佳答案

您应该将对象传递给每个 Controller 实例的构造函数,并且 Controller 操作方法都应该使用传递给 Controller 实例构造函数的对象实例。

ASP.NET MVC 附带的默认 ControllerFactory 不允许您执行此操作。然而,有免费的插件框架(我喜欢的是 Autofac)允许这种编程风格。

关于asp.net-mvc - ASP.net MVC : Where to keep application data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/806167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com