【发布时间】:2016-09-22 09:34:36
【问题描述】:
昨天,我的一个朋友让我创建一个程序(必须实现依赖注入)来返回汽车的速度。所以,我创建了一个小程序,我厌倦了在其中实现构造函数注入。
class Program
{
static void Main(string[] args)
{
Maruti objMaruti = new Maruti();
clientClass obj = new clientClass(objMaruti);
obj.getSpeed();
}
}
public class clientClass
{
ISpeed _ISpeed;
public clientClass(ISpeed obj)
{
this._ISpeed = obj;
}
public int getSpeed()
{
return _ISpeed.Speed();
}
}
public interface ISpeed
{
int Speed();
}
public class Maruti : ISpeed
{
public int Speed()
{
return 200;
}
}
public class Audi : ISpeed
{
public int Speed()
{
return 400;
}
}
public class BMW : ISpeed
{
public int Speed()
{
return 600;
}
}
现在,在 main 方法中,我的朋友可以检查任何汽车的速度。
class Program
{
static void Main(string[] args)
{
Maruti objMaruti = new Maruti();
clientClass obj = new clientClass(objMaruti);
obj.getSpeed();
}
}
他问我一个问题,你为什么要创建这个构造函数注入和客户端类。如果直接调用类,就会得到结果。
class Program
{
static void Main(string[] args)
{
Maruti objMaruti = new Maruti();
objMaruti.Speed();
//If user wants to check Audi Speed.
Audi objAudi = new Audi();
objAudi.Speed();
}
}
他说的对吗?哪种方式最好,为什么?
【问题讨论】:
-
他的下一个问题是你为什么使用 OOP,因为你可以使用过程或函数式编程?这是一个依赖倒置的例子。
-
如果您接受
ISpeedUsingProvider作为参数,该示例会更好。clientClass在某处使用了.getSpeed()方法,但没有Speed()方法。你写的例子是依赖倒置的例子,如上所述。
标签: c# dependency-injection interface