Rau*_*uez 4 .net c# dependency-injection inversion-of-control unity-container
我支持在您的应用程序上使用依赖注入,尽管有些人认为它会给代码增加不必要的复杂性.在过去的几天里,我想知道,在某些情况下,使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我很少调用SampleMethod2并且每次需要一个Class实例时我会注入它会怎么样?那不是在浪费资源吗?
我几天前得到了这个问题,我正试图找出答案.是否更容易不使用DI并让每个方法在使用时创建他们需要的实例以避免这种"浪费"?
由于DI提供的解耦,这是否是合理的"浪费"?
是的,它将被"浪费",但废物的性质取决于它的设置:
Service2始终作为新实例创建; 那是相当昂贵的Service2是单实例模式,它所做的就是获取现有实例(超便宜)Class是单实例模式; 它获取该实例并且不注入任何新内容此外,这表明违反了SRP.也许Class应该分成两个对象,一个依赖于Service1一个对象,一个依赖于Service 2(甚至两者).
无论如何,"浪费"只有在实际影响您的应用时才是重要的,DI的好处远远超过这些问题.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |