Jer*_*acs 7 c# dependency-injection interface
一般来说,我的依赖项被抽象为接口,但我只会在非测试使用期间使用一个具体的实现.例如,我是否写了一个FooService:
public class FooService : IFooService
{
private readonly IBarDependency _barDependency;
public FooService(IBarDependency barDependency)
{
this._barDependency = barDependency;
}
public FooService() : this (new BarDependency())
{
// nothing to do here
}
. . . // code goes here
}
Run Code Online (Sandbox Code Playgroud)
现在纯粹主义者倾向于惊恐万分,因为我在无参数构造函数中实例化了一个具体的类.在过去,我对此不以为然,因为我知道我唯一不会使用具体类的时候是单元测试和模拟依赖项.
虽然它确实将FooService班级与BarDependency班级联系起来,但它并不紧密耦合; 这些类和接口也存在于同一个程序集中,因此在我看来并不像我在这里丢失了很多东西,或者把自己画成了一个角落.我仍然可以轻松地测试FooService类而不会得到无法管理的代码,只需使用允许我传入模拟接口的构造函数.
所以问题是:这里的实际风险是什么?我有什么损失,这种模式值得添加IoC容器?
例如,终身管理.也许您BarDependency在整个代码中使用并且只希望一个实例存活.如果每个用户都创建自己的实例,则无法执行此操作.
new BarDependency()如果您想要替换它,您还必须找到所有用法new NewBarDependency().
容器为您修复了这两个问题,然后在一个方法中配置对象的实例化和生命周期,即设置容器的位置.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |