0

我继承了一个设计非常糟糕的 ASP.NET MVC 3 应用程序。

我有 238 行和 63 个文件通过 Session 对象引用 Unity Manager,如下所示:

UnityManager unity = (UnityManager)Session["UnityManager"];

托管此 MVC 应用程序的服务器的 IIS 会话超时最初设置为 20 分钟,这对我的客户造成了严重破坏。你能想象 IoC “管理器”对象在 20 分钟内结束它的生命周期,而我的用户需要至少 2 小时?!?!我最近重置了 IIS 会话超时设置并将其更改为 120 分钟...

我现在想研究从我的应用程序中删除 UnityManager Session 对象。我真的不明白该怎么做。

我在这个应用程序中也没有单元测试,这真的让我很困扰。我们已经通过当前的 Session 对象查看了 Unity Manager 的单元测试,但不知道如何模拟它。

我的问题是:

  1. 在没有 Session 对象的情况下引用 Unity Manager 的最佳方法是什么?如何在我的控制器中调用和实例化它?
  2. UnityManager 的 Session 对象是首选方法吗?我的猜测是否定的,这太可怕了。
  3. 如何对当前的 Unity Manager Session 对象进行单元测试?
4

1 回答 1

2

我采用的方法是用我自己的使用 Unity 的控制器解析器替换默认的控制器解析器(我也使用 Autofac 完成了此操作),并允许我将我的依赖项注入控制器的构造函数(参见这个答案)。

我还在 GitHub 上放了一个示例 MVC 应用程序:https ://github.com/agartee/Mvc4CustomIoC

于 2013-09-05T16:36:39.463 回答