使用构造器注入,依赖被注入到消费者这样的(至少我希望我理解正确的话):保护条款和依赖注入空对象模式和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