昨天,我的一个朋友让我创建一个程序(必须实现依赖注入),它返回汽车的速度。所以,我创建了一个小程序,我厌倦了实现构造函数注入。
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();
}
}
他问我一个问题,为什么你创建了这个构造函数的Injection和client类。如果您直接致电该课程,您将获得结果。
Map usersByEnterprise = new HashMap();
他是对的吗?哪种方式最好,为什么?
答案 0 :(得分:0)
我认为糟糕的命名让你的朋友问你这个问题。如果您需要记录不同车辆的速度怎么办?客户端类将具有此名称
public class SpeedLog
{
ISpeed speed;
ILogger logger;
public SpeedLog(ISpeed speed, ILogger logger)
{
this.speed = speed;
this.logger = logger;
}
public void Information()
{
logger.Information($"{speed.GetType().Name} is running with {speed.Speed()}");
}
}
只要对象在其公共接口中具有Speed
方法,此客户端类就可以记录任何对象的速度。 ISpeed
接口使我们有机会定义Speed
方法的签名。现在,SpeedLog
类型不依赖于特定类型,例如Maruti
或Audi
,甚至不依赖于基本类型Car
(如果有),以检索速度信息。如果SpeedLog
类型实现Star
接口,ISpeed
现在可以记录星的速度。当我们添加新的Star
类型时,我们只需要编译包含此类型的库,并且SpeedLog
类型的库保持不变。如果要求,Inversion of Control库可以注入Star
对象。