【发布时间】:2013-09-05 15:17:19
【问题描述】:
我继承了一个设计非常糟糕的 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 的单元测试,但不知道如何模拟它。
我的问题是:
- 引用 Unity Manager 的最佳方法是什么? 会话对象?如何在我的控制器中调用和实例化它?
- UnityManager 的 Session 对象是首选方法吗?我猜 不,这太可怕了。
- 如何对当前的 Unity Manager Session 对象进行单元测试?
【问题讨论】:
-
“UnityManager”有什么作用?这是您对 IoC 容器(A UnityContainer)的抽象吗?如果是这样,您可以使用 Microsoft.Practices.ServiceLocation.ServiceLocator (Unity) 注册您的容器,这将静态设置您的容器,而不是按会话设置。每个会话确实不需要自己的 IoC 配置。
标签: c# asp.net-mvc unit-testing session unity-container