【问题标题】:Options for wiring dependencies with NInject使用 NInject 连接依赖项的选项
【发布时间】:2023-03-03 22:45:02
【问题描述】:

使用 NInject(最好是 2.0),我们有哪些选项可以在 Web 应用程序中连接我们的对象依赖项?

可以在 XML 配置文件中定义它们吗?

还是必须通过代码来完成?

【问题讨论】:

    标签: asp.net asp.net-mvc dependency-injection configuration-files ninject


    【解决方案1】:

    基于 xml 的配置有一个扩展:https://github.com/ninject/ninject.extensions.xml

    您可以在代码中进行更强大的绑定。

    【讨论】:

      【解决方案2】:

      Ninject 没有 XML 配置,抱歉,我无法提供直接链接(因为他们的网站有 flash 元素),但这里引用 ninject.org 的引文:

      从 XML 中解脱出来

      大多数其他 .NET 依赖注入 框架是围绕使用而设计的 XML 声明类型绑定。 而不是强迫你写 繁琐且容易出错的文本, Ninject 用流利的语言武装你 接口,它可以让您连接 您的应用程序使用 完整的代码。这意味着您可以 利用的特点 IDE 和编译器,例如代码完成 和类型安全。

      【讨论】:

      • 令人惊奇的是,他们可以把负面的声音变成一个加号。大多数其他 DI\Ioc 允许您使用 Xml 或 Code。
      • 这是非负数。故意削减 XML 支持,因为它是可维护性的痛苦。
      • 我主要使用代码来映射我的绑定,但有些情况下配置是有效的。对于调试,我可能想将 IMailService 绑定到 VirtualMailService,但在发布时使用 SmtpMailService。配置文件根据发布环境进行转换。
      • 如果您需要重命名这些服务实现,该怎么办?你应该牢记这一点,你的所有团队成员也应该牢记这一点。对于您的情况,我将为“发布”和“调试”模式创建一个代码内配置,并且在配置文件中我将有一个类似"<add key="configuration-mode" value="release"/> 的设置。这样更好。
      • 是的 - 我同意使用“配置模式”可能是根据配置进行不同绑定的最安全方式。
      【解决方案3】:

      我看到的仅在代码中定义绑定的问题是您必须添加对 dll 的引用。 如果不添加对新 dll 的引用(删除对旧 dll 的引用)、更改代码并重新编译,则无法更改绑定。

      如果我们有 xml 配置,我根本不需要参考,也不需要重新编译。 现在我有使用 DI 将存储库传递给控制器​​的 MVC 应用程序。没有别的,然后用于添加绑定的 Ninject 代码使用存储库的具体实现。我仍然需要添加对包含实现的 dll 的引用。只需一行代码!

      或者也许有可能使用 Ninject 来实现这一点?

      【讨论】:

        【解决方案4】:

        您希望实现什么目标?您要配置什么样的东西?动态选择策略 ?传递端口号?您可以提供更多关于您的想法的信息,以获得更好的答案[您可以接受:P]。

        您需要拆分以下关注点:

        1. 已知对象连接 (DI)
        2. 配置 - 通常你会希望将它们分成小的集中子集,例如强类型配置元素与在一大堆中混杂在一起的全局设置池 appSettings
        3. 插件/未知对象连接(MEF?)

        在第一个池中,在代码中执行此操作是正确的方法,我想不出 XML 会带来什么优势,尤其是。在强名称等的上下文中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-06
          • 2014-05-26
          • 1970-01-01
          • 2015-10-09
          • 1970-01-01
          • 2023-03-08
          • 2018-01-15
          • 1970-01-01
          相关资源
          最近更新 更多