【问题标题】:Is Dependency Injection a must in asp.net MVC?依赖注入在 asp.net MVC 中是必须的吗?
【发布时间】:2013-08-27 12:29:13
【问题描述】:

我目前正在查看多个教程(和阅读书籍)以开始使用 ASP.NET MVC。

我看到 ninject(或类似的)被广泛用于实现依赖注入,据我了解,这里的主要问题是我需要的类的资源分配。

例如,我们希望确保我们只有一个 repo 对象的实例。

我需要首先学习,所以我有兴趣知道如何在不使用 DI 技术的情况下创建 ASP.NET MVC,并且就我的对象资源而言仍然是正确的

更多信息:

我做了一些winforms 应用程序。这些应用程序使用业务层 DLL (BLL)。这个 BLL 可以访问我的 DAL DLL(纯 ADO.NET)。他们工作得很好..

不,我想将 SAME BLL 用于 MVC 应用程序。

注射与否?

没有注入实现?

我是否只是在我的控制器构造函数中创建 BLL 对象,仅此而已?

【问题讨论】:

    标签: asp.net-mvc dependency-injection


    【解决方案1】:

    ASP.NET MVC 根本不需要你使用依赖注入。如果您的所有控制器都有默认构造函数,它将完美地工作。另一方面,您将负责创建对象并管理它们的生命周期。如果您需要为应用程序拥有一个存储库对象,则必须手动实现其生命周期(使用静态变量或单例模式)。

    如果您关心测试,使用依赖注入肯定会帮助您设计更多可测试和可重用的对象。您可以在测试代码中轻松地用测试替身替换依赖项,并让 DI 容器在运行时注入真正的实现。

    如果您确定不使用它,请确保您的所有控制器都有默认构造函数。您不需要任何配置。

    【讨论】:

    • 所以如果我不使用 DI:我在控制器的构造函数中创建我的 BusinessLayer 对象?然后,当页面加载完成时,对象被处理或者我必须做其他事情?我知道有 2 层 DLL。一个是我的 DAL (ADO.NET),一个是我访问 DAL 的业务层。我想创建只与 BLL 通信的 MVC 应用程序...
    • 是的,您必须在控制器构造函数中新建依赖项。控制器对象在请求的整个生命周期中都存在,因此如果没有其他对象持有对它的引用,垃圾收集器将处理这些。您是否有一些需要手动处理的依赖项? (实现 IDisposable)
    • 知道了。不,我没有
    • @e4rthdog 请记住,在控制器构造函数中更新依赖项将在每个请求上创建新对象。您必须在需要时手动实现单例生命周期。
    【解决方案2】:

    依赖注入不是使用 ASP.net MVC 的要求。没有它你绝对可以构建一个 MVC 应用程序。

    如果您想对您的应用程序执行单元测试,它会派上用场。如果您想对控制器中的操作进行单元测试,如果您设置了 DI,那么您可以模拟包含在控制器构造函数中的依赖项(DI 在应用程序运行时负责)并设置响应当它们被 Action 调用时返回。

    如果您不使用依赖注入,这将更加困难和不切实际(如果不是不可能的话)。在这种情况下,如果您想使用单元测试,则很难为您的操作编写纯单元测试,因为您将没有简单的方法来模拟您的测试服务和数据访问层。

    正如您所写,DI 层还将使您能够确保只有一个您要注入的存储库对象的实例等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多