这一直困扰着我...... 这是一个关于依赖注入的问题。
代码很简单,它只是演示了问题:
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);
}
没有那么多。
...我的问题是 - 使用'generic'类中的参数化构造函数可以轻松实现:
public class GenericClass
{
IVehicle vehicleDependents;
public GenericClass(IVehicle vehicle)
{
vehicleDependent = vehicle;
}
public void DoSomething()
{
vehicleDependent.Drive();
Console.ReadLine();
}
}
这样我们就不需要接口和它附带的方法了。我们只是在构造函数中询问类型。
那么在这种情况下使用接口构造函数有什么好处? 谢谢。
答案 0 :(得分:1)
有一篇关于依赖注入(DI)here的帖子。特别参见@Thiago Arrais的答案。
如果构造函数是最小的,并且依赖项被指定为接口,那似乎很好。这意味着其他代码可以轻松实例化您的类,并提供自己的命令。