首页 > 解决方案 > 当并非所有实例都被使用时,依赖注入是一个好主意吗?

问题描述

我是在您的应用程序上使用依赖注入的支持者,尽管有些人认为它给代码增加了不必要的复杂性。在过去的几天里,我一直在想,对于某些场景,使用 DI 时可能会有一些浪费。

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

使用 DI

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 实例时都会注入它怎么办?那不是浪费资源吗?

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

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

标签: c#.netdependency-injectioninversion-of-controlunity-container

解决方案


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

  • 如果Service2总是作为新实例创建;这是相当昂贵的
  • 如果Service2处于单实例模式,它所做的只是获取现有实例(超级便宜)
  • 如果Class处于单实例模式;它获取实例而不注入任何新内容

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

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


推荐阅读