替换(和单元测试)Unity Manager会话对象?

时间:2013-09-05 15:17:19

标签: c# asp.net-mvc unit-testing session unity-container

我继承了一个设计非常糟糕的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. 在没有使用Unity的情况下引用Unity Manager的最佳方法是什么? 会话对象?如何在我的控制器中调用和实例化它?
  2. UnityManager的Session对象是首选方法吗?我猜 不,这太可怕了。
  3. 如何对当前的Unity Manager会话对象进行单元测试?

1 个答案:

答案 0 :(得分:2)

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

我还在GitHub上放了一个示例MVC应用程序:answer