gpt4 book ai didi

c# - 当并非所有实例都被使用时,依赖注入(inject)是个好主意吗?

转载 作者:太空狗 更新时间:2023-10-30 00:37:27 28 4
gpt4 key购买 nike

我支持在您的应用程序中使用依赖注入(inject),尽管有些人认为这会给代码增加不必要的复杂性。这几天一直在想,对于某些场景,使用DI可能会造成一些浪费。

让我用代码示例来解释一下:

使用依赖注入(inject)

public class Class 
{
private Service1 service1;
private Service2 service2;

public MyClass (Service1 service1, Service2 service2)
{
this.service1 = service1;
this.service2 = service2;
}

private int SampleMethod()
{
Console.WriteLine("doing something with service 1");
service1.DoSomething();
return 0;
}

private int SampleMethod2()
{
Console.WriteLine("doing something with service 2");
service2.DoSomethingElse();
return 1;
}
}

如果我很少调用 SampleMethod2 并且每次需要 Class 实例时我都会注入(inject)它怎么办?那不是浪费资源吗?

几天前我收到了这个问题,我正在尝试找出答案。不使用 DI 并让每个方法在使用时创建它们需要的实例以避免这种“浪费”是否更容易?

由于 DI 提供的解耦,这是合理的“浪费”吗?

最佳答案

是的,它会被“浪费”,但这种浪费的性质取决于它的设置方式:

  • 如果 Service2 总是被创建为一个新实例;那是相当昂贵的
  • 如果 Service2 处于单实例模式,它所做的就是获取现有实例( super 便宜)
  • 如果 Class 处于单实例模式;它获取那个实例并且不注入(inject)任何新的

此外,这表明违反了 SRP。或许 Class 应该分成两个对象,一个依赖于 Service1,另一个依赖于 Service 2(甚至两者)。

不管上述情况如何,“浪费”只有在它实际影响您的应用程序时才是重要的,DI 的好处远远超过这些问题。

关于c# - 当并非所有实例都被使用时,依赖注入(inject)是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50934665/

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