我对控制反转还不太熟悉(虽然现在正在学习),如果它是解决我的问题的方法,请告诉我,我会回去学习它。
我有一对需要Session变量的控制器,由于Session的工作方式,自然而然地没有发生太多特殊的事情,但这让我想知道在两个独立的控制器之间共享相关对象的最干净的方法是什么。在我的具体场景中,我有一个UploadController和一个ProductController,它们配合使用来上传图像文件。当UploadController上传文件时,上传的数据将存储在Session中。在此之后,我需要在ProductController中访问该Session数据。如果我在两个控制器中都创建一个包含上传信息的Session变量的get/set属性,我就可以访问那些数据,但同时我也将违反所有DRY原则,更不用说创建一个最好是混乱的设计,其中一个对象被两个完全不相关的对象共享和修改。
你有什么建议吗?
确切的上下文:
文件上传视图将文件发布到UploadController.ImageWithpreview(),然后读取发布的文件并将其复制到临时目录。保存文件后,另一个类生成上传图像的缩略图。原始文件和生成的缩略图的路径随后通过JsonResult返回给JavaScript回调函数,该回调函数更新页面上的一些动态内容,在该页面上可以“保存”或“取消”。无论上传的图像是被保存还是被跳过,我都需要从临时目录中移动或删除它和生成的缩略图。为了方便起见,UploadController在Session维护的队列对象中跟踪所有上传文件及其缩略图。
回到视图:在表单中填充了上传的图像的生成缩略图之后,表单将回传到ProductsController,其中选择的文件被确定(目前我将文件名存储在隐藏字段中,我意识到这是一个可怕的漏洞),然后将其从临时目录复制到永久位置。理想情况下,我希望只需访问我在Session中存储的队列即可,以便表单不需要像现在这样包含图像位置。这就是我设想的解决方案,但我将热切地听取任何评论或批评。