gpt4 book ai didi

c# - 依赖注入(inject)和 C# 中的保护子句和空对象模式

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:24 24 4
gpt4 key购买 nike

使用构造函数注入(inject),依赖项会像这样注入(inject)到消费者(至少我希望我理解正确):

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 使用空对象模式,我需要保护子句吗?还是注入(inject)Null Object不对?

更新:为了澄清,让我们假设我有这样的类和接口(interface):

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 永远不会被注入(inject)?

最佳答案

恕我直言,在以下情况下我会放弃保护条款:

  • SomeConsumer 仅在您的产品中使用
  • 您的团队和/或依赖注入(inject)容器配置彻底实践了空对象模式

我可能不会放弃保护条款,如果:

  • 没有为目标受众充分记录对空对象的需求
  • SomeConsumer 是开放 API 的一部分,供不知道空对象模式的开发人员使用
  • 我希望在我的依赖注入(inject)容器实例化 SomeConsumer 时收到反馈,说我犯了一个错误

关于c# - 依赖注入(inject)和 C# 中的保护子句和空对象模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27741021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com