替换(和单元测试)Unity 管理器会话对象

本文关键字:管理器 会话 对象 Unity 单元测试 替换 | 更新日期: 2023-09-27 18:30:28

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

我有 238 行和 63 个文件通过会话对象引用 Unity 管理器,如下所示:

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

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

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

在这个应用程序中也没有单元测试,这真的很困扰我。我们已经查看了通过当前会话对象对 Unity 管理器进行单元测试,但无法弄清楚如何模拟它。

我的问题是:

  1. 在没有会话对象?如何在控制器中调用和实例化它?
  2. UnityManager 的会话对象是首选方法吗?我的猜测不,这太可怕了。
  3. 如何对当前的 Unity 管理器会话对象进行单元测试?

替换(和单元测试)Unity 管理器会话对象

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

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