Asp.net mvc ASP.net MVC:在哪里保存应用程序数据?
我刚刚开始将一个应用程序移植到ASP.net MVC,我有一个保存应用程序状态的对象(它跟踪机器上运行的某些进程,根据需要启动和停止,并发送/接收MSMQ消息) 我应该把这个东西放在哪里?在我当前的应用程序(基于HttpListener)中,它是一个单例,但是我知道单例会使测试变得困难。至少在MVC应用程序本身的上下文中,很难模拟或测试这个对象,而且它在应用程序之外有自己的测试集。但是,它可能需要被测试用的存根替换 该对象需要对多个控制器可用。我应该将此对象存储在何处,以及如何使其可供控制器使用?在我所见过的ASP.net MVC示例中,我从未见过这样的案例 更新: 我想我需要解释为什么我不能将这些数据存储在数据库中。首先,我必须解释应用程序的功能: 该应用程序提供由多个“引擎”动态生成的图像,这些引擎是服务器上运行的进程,通过MSMQ进行通信。让我们调用我要问的关于EngineManager的问题的对象。这个过程是这样的:Asp.net mvc ASP.net MVC:在哪里保存应用程序数据?,asp.net-mvc,singleton,Asp.net Mvc,Singleton,我刚刚开始将一个应用程序移植到ASP.net MVC,我有一个保存应用程序状态的对象(它跟踪机器上运行的某些进程,根据需要启动和停止,并发送/接收MSMQ消息) 我应该把这个东西放在哪里?在我当前的应用程序(基于HttpListener)中,它是一个单例,但是我知道单例会使测试变得困难。至少在MVC应用程序本身的上下文中,很难模拟或测试这个对象,而且它在应用程序之外有自己的测试集。但是,它可能需要被测试用的存根替换 该对象需要对多个控制器可用。我应该将此对象存储在何处,以及如何使其可供控制器使用
正如您所见,它不是典型的数据库支持的Web服务器。将应用程序数据保存在数据库中,并通过模型层访问它。客户端仅保留会话id。您应该将对象传递给每个
控制器
实例的构造函数,并且控制器操作方法都应该使用传递给控制器
实例构造函数的对象实例
ASP.NET MVC附带的默认
ControllerFactory
将不允许您执行此操作。但是,有一些免费的插件框架(我喜欢的是Autofac)允许这种编程风格。如果您希望此对象对所有用户都可用,即它不是特定于会话的,您可以考虑将其存储在应用程序状态:
然而,正如上面链接的页面所列,应用程序状态有几个缺点,所以在您继续使用之前,请确保这些问题不会影响您。通常,我避开应用程序状态,将应用程序数据存储在后端数据库中。因为您不想走这条路,所以应用程序状态可能对您没有问题。我无法将此应用程序数据保存在数据库中。这不是传统的数据库支持服务器-它使用MSMQ与计算机上的多个进程通信,需要启动和停止这些进程等。我在问题中对此进行了解释。抱歉,如果我不清楚,我将对此问题进行解释。感谢您的编辑,更清楚。在MVC应用程序中如何做到这一点?应用程序属性无法通过控制器访问,因为它在传统ASP.NET应用程序的代码隐藏中。请再说一遍,“如何在MVC应用程序中执行此操作?应用程序属性无法通过控制器访问,因为它在传统ASP.NET应用程序的代码隐藏中。”-在MVC应用程序的上下文中,当它显然不能回答所请求的问题时,为什么会将其标记为答案。System.Web.HttpContext.Current.application可在控制器中访问。