依赖注入:使用构造函数注入

时间:2016-09-22 09:34:37

标签: c# dependency-injection interface

昨天,我的一个朋友让我创建一个程序(必须实现依赖注入),它返回汽车的速度。所以,我创建了一个小程序,我厌倦了实现构造函数注入。

 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();

他是对的吗?哪种方式最好,为什么?

1 个答案:

答案 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类型不依赖于特定类型,例如MarutiAudi,甚至不依赖于基本类型Car(如果有),以检索速度信息。如果SpeedLog类型实现Star接口,ISpeed现在可以记录星的速度。当我们添加新的Star类型时,我们只需要编译包含此类型的库,并且SpeedLog类型的库保持不变。如果要求,Inversion of Control库可以注入Star对象。