c# - 重载和依赖注入(inject)有什么区别?

标签 c# dependency-injection

虽然接口(interface)驱动中的 DI...我仍然不清楚这与基本重载概念的确切区别。任何 C# 示例都会有所帮助。

编辑: 我在这里阅读 the reason for my question StreamReader 可以看作是 IoC/DI 的示例...这与重载有何不同?或者它只是 DI 的外观而不完全是 DI?

最佳答案

它们是完全不同的概念。

重载:提供多个具有相同名称(或构造函数)但参数数量和/或类型不同的方法。

依赖注入(inject):为组件提供它们需要使用的所有服务(例如身份验证器、数据库连接等),而不是让它们自己构建这些依赖项。 DI 鼓励接口(interface)和实现之间的清晰分离,并使单元测试更加容易(因为您可以模拟/伪造依赖项)。

编辑:我不认为我通常会使用 StreamReader 作为依赖注入(inject)的一个很好的例子——特别是,它可以为你创建自己的流,如果你只指定一个文件名。可以说,带有 Stream 参数的重载实际上允许注入(inject)流依赖性,但这不是我通常认为的 DI。构造函数当然是重载的一个例子 - 但两者实际上无关。

通常我会从服务的角度来考虑 DI - 比如身份验证器,或者可能是链中的下一个服务(例如,请求经历多个阶段)。

关于c# - 重载和依赖注入(inject)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3364054/

相关文章:

c# - 使用 Task.Factory.StartNew 时更新 UI 标签

c# - 性能计数器和远程机器

java - 这个原型(prototype)类只会被Spring容器创建一次吗?

java - HK2中如何将多个接口(interface)收集到一个Collection中?

c# - 在 Asp.Net Core 2 中将 SignInManager 和 AspNetUserManager 注入(inject)中间件

c# - 遍历聚合

c# - 绑定(bind)到 ListView 中的 WPF 组合框(2 向)

c# - 如何在 .NET 3.5 中通过 NamedPipe 发送对象?

android - Dagger 2中 "HasFragmentInjector"的实际用法是什么

c# - 数据访问层的静态方法与依赖注入(inject)