使用構造器注入,依賴被注入到消費者這樣的(至少我希望我理解正確的話):保護條款和依賴注入空對象模式和C#
public class SomeConsumer
{
private IDependency someDependency;
public SomeConsumer(IDependency someDependency)
{
if (someDependency != null)
{
this.someDependency = someDependency;
}
else
{
throw new ArgumentNullException("someDependency");
}
}
public void Baz()
{
someDependency.DoSomething();
}
(...)
}
如果我使用IDependency的空對象模式,我是否需要guard子句?或者注入一個空對象是否是錯誤的?
UPDATE: 澄清,讓我們假設我有類和接口是這樣的:
public interface IDependency
{
void DoSomething();
}
public class NullDependency : IDependency
{
public void DoSomething()
{
//Do nothing...
}
}
public class RealDependency : IDependency
{
public void DoSomething()
{
Console.WriteLine("Did something");
}
}
public class Foo
{
public void Bar()
{
IDependency dependency = new NullDependency();
SomeConsumer sc = new SomeConsumer(dependency);
sc.Baz();
}
}
我可以再安全地刪除從SomeConsumer保護條款,使它看起來像:
public class SomeConsumer
{
private IDependency someDependency;
public SomeConsumer(IDependency someDependency)
{
this.someDependency = someDependency;
}
public void Baz()
{
//if someDependency is a NullDependency, this does nothing
someDependency.DoSomething();
}
(...)
}
或者我應該使用保護條款,因爲我不能確定null
將永遠不會被注入?
我忘了添加拋出的異常,問題就更新了。 – Thaoden