Gil*_*lla 2 c# dependency-injection
虽然界面驱动的DI ...我仍然不清楚这与基本重载概念的确切区别.任何C#示例都会有所帮助.
编辑:我在这里读到我的问题的原因
,StreamReader可以看作是IoC/DI的例子......这与过载有什么不同?或者它只是DI而不是完全DI?
Jon*_*eet 14
他们是完全不同的概念.
重载:提供具有相同名称(或构造函数)的多个方法,这些方法因参数的数量和/或类型而不同.
依赖注入:为组件提供他们需要使用的所有服务(例如,身份验证器,数据库连接等),而不是让他们自己构建这些依赖项.DI鼓励在接口和实现之间进行清晰的分离,并使单元测试更容易(因为您可以模拟/伪造依赖项).
编辑:我认为我通常不会将其StreamReader作为依赖注入的一个很好的例子 - 特别是,如果你只指定一个文件名,它可以为你创建自己的流.可以说带Stream参数的重载有效地允许注入流依赖,但它不是我通常认为的DI.构造函数当然是一个重载的例子 - 但这两者实际上是无关的.
通常我会在服务方面考虑DI - 例如身份验证者,或者可能是链中的下一个服务(例如,请求经历多个阶段).
重载和依赖注入是完全独立的想法,除了在运行依赖注入时可以利用重载之外,没有任何共同之处.
重载是该语言的一个特性,其中(例如)两个方法可以共享相同的名称,但具有不同的参数列表.例如:
public Foo MakeFoo(int bar) { }
public Foo MakeFoo(double bar) { }
public Foo MakeFoo(Decimal bar) { }
Run Code Online (Sandbox Code Playgroud)
依赖注入是一种独立于语言的技术,您可以删除在对象中生成的隐藏依赖项,而不是将它们传递给对象.例如:
改变这个:
// Foo has an implicit dependency on Bar
class Foo
{
private Bar myBar;
public Foo()
{
this.myBar = new Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
进入这个:
// Now Foo's dependency on Bar is explicit b/c it's being injected in the .ctor
class Foo
{
private Bar myBar;
public Foo(Bar aBar)
{
this.myBar = aBar;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |