为了账号安全,请及时绑定邮箱和手机立即绑定

当并非所有实例都被使用时,依赖注入是一个好主意吗?

当并非所有实例都被使用时,依赖注入是一个好主意吗?

C#
DIEA 2021-08-22 14:51:02
我支持在你的应用程序上使用依赖注入,尽管有些人认为它给代码增加了不必要的复杂性。在过去的几天里,我想知道,对于某些场景,使用 DI 时可能会有些浪费。让我用代码示例来解释它:使用 DIpublic 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 实例时都会注入它怎么办?那岂不是浪费资源?几天前我收到了这个问题,我正在尝试找出答案。不使用 DI 并让每个方法在使用时创建他们需要的实例以避免这种“浪费”是否更容易?由于 DI 提供的解耦,这是合理的“浪费”吗?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

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

  • IfService2总是作为一个新实例创建;那相当昂贵

  • 如果Service2处于单实例模式,它所做的就是获取现有实例(超级便宜)

  • 如果Class处于单实例模式;它获取实例而不注入任何新内容

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

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


查看完整回答
反对 回复 2021-08-22
  • 1 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信