依赖注入,构造函数的接口

时间:2014-01-17 16:04:40

标签: interface constructor dependencies code-injection

这一直困扰着我...... 这是一个关于依赖注入的问题。

代码很简单,它只是演示了问题:

public static void Main(string[] args)
        {    
            //Take new instance from the app config
            IVehicle vehicle = CreateVehicle(); 

            //inject the new instance
            var mainClass = new GenericClass();
            mainClass.InjectType(vehicle); 

            //call the generic class 
            mainClass.DoSomething(); 
        }

        public static IVehicle CreateVehicle()
        {
            var dynamicType = Type.GetType(ConfigurationManager.AppSettings["ClassName"]);

            var vehicle = Activator.CreateInstance(dynamicType);

            return (IVehicle)vehicle; 
        }

 public class GenericClass : IInjectDependent
    {
        IVehicle vehicleDependent;

        public void DoSomething()
        {
            vehicleDependent.Drive();
            Console.ReadLine();
        }

        public void InjectType(IVehicle vehicle)
        {
            vehicleDependent = vehicle;
        }
    }

 public interface IInjectDependent
    {
        void InjectType(IVehicle vehicle);
    }

没有那么多。

  1. 一种类似工厂的快速方法来创建一种车型(从中拉出来) 在这种情况下,应用程序配置)。
  2. 然后通过方法将创建的类型注入“generic”类 使用IInjectDependent实现
  3. 带有注入类型的'generic'类然后关闭并调用     具体课程的逻辑(公共汽车,汽车,救护车,以及任何类实现IVehicle界面)
  4. ...我的问题是 - 使用'generic'类中的参数化构造函数可以轻松实现:

     public class GenericClass 
        {
            IVehicle vehicleDependents;
    
            public GenericClass(IVehicle vehicle)
            {
                vehicleDependent = vehicle; 
            }
    
            public void DoSomething()
            {
                vehicleDependent.Drive();
                Console.ReadLine();
            }  
        }
    

    这样我们就不需要接口和它附带的方法了。我们只是在构造函数中询问类型。

    那么在这种情况下使用接口构造函数有什么好处? 谢谢。

1 个答案:

答案 0 :(得分:1)

有一篇关于依赖注入(DI)here的帖子。特别参见@Thiago Arrais的答案。

如果构造函数是最小的,并且依赖项被指定为接口,那似乎很好。这意味着其他代码可以轻松实例化您的类,并提供自己的命令。