tov*_*sev 8 c# dependency-injection solid-principles
根据SOLID原则,类不能依赖于其他类,必须注入依赖项.这很简单:
class Foo
{
public Foo(IBar bar)
{
this.bar = bar;
}
private IBar bar;
}
interface IBar
{
}
class Bar: IBar
{
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望我的Foo类能够创建Bar,而不知道IBar背后的确切实现呢?我可以在这里考虑4种解决方案,但所有这些解决方案似乎都有缺点:
class Foo
{
public void DoSmth(IBarCreator barCreator)
{
var newBar = barCreator.CreateBar();
}
}
interface IBarCreator
{
IBar CreateBar();
}
class BarCreator : IBarCreator
{
public IBar CreateBar()
{
return new Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
最后一种情况看起来很自然,但BarCreator类的代码太过分了.那你觉得怎么样,哪个最好?
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |