使用IoC容器连接依赖项的首选方法是什么?

Vad*_*dim 5 dependency-injection inversion-of-control

我相信大多数IoC容器允许您使用XML配置文件连接依赖项.使用配置文件与在代码中注册依赖项有什么缺点和优点?

Pat*_*sen 3

这些优点和缺点是基于我对 Spring 的工作。其他容器可能略有不同。

XML

  • 灵活的
  • 在某些方面比注释更强大
  • 对类的依赖关系进行非常明确的建模

骗局

  • 冗长的
  • 重构困难
  • 在多个文件之间切换

注释

  • 减少文件切换
  • 自动配置,接线简单
  • 比 xml 更简洁

骗局

  • 代码中更多特定于部署的数据(通常您可以使用 xml 配置覆盖它)
  • xml 总是需要的(?),至少要设置基于注释的配置
  • 在搜索用作依赖项的类时,注释魔法可能会导致混乱

代码

  • 可以利用强类型语言(例如C#、Java)
  • 一些编译时检查(但不能静态检查依赖关系)
  • 可以利用 DSL(例如 Binsor、Fluent 接口)
  • 比 XML 更简洁(例如,您不需要始终指定整个程序集限定名称(在谈论 .net 时))

骗局

  • 通过代码接线可能会导致接线复杂
  • 对代码库中 IOC 容器的硬依赖

我混合使用 XML+注释。一些特别是关于数据库访问的东西总是通过 xml 配置,而控制器或服务之类的东西大多是通过代码中的注释进行配置。

[编辑:我借用了 Mauschs 代码 PRO]