【问题标题】:Replace (and unit test) Unity Manager Session Objects?替换(和单元测试)Unity Manager 会话对象?
【发布时间】: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 的单元测试,但不知道如何模拟它。

我的问题是:

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

【问题讨论】:

  • “UnityManager”有什么作用?这是您对 IoC 容器(A UnityContainer)的抽象吗?如果是这样,您可以使用 Microsoft.Practices.ServiceLocation.ServiceLocator (Unity) 注册您的容器,这将静态设置您的容器,而不是按会话设置。每个会话确实不需要自己的 IoC 配置。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 2013-01-20
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2011-07-02
    • 2018-02-11
    相关资源
    最近更新 更多