依赖注入 与控制反转(IOC DI)
控制反转 IoC 的目的是消减程序之间耦合。依赖注入是将对象实例注入到客户端程序中。
不采用注入。用人吃水果的例子:客户端和类型将是如下的强依赖关系。
苹果可以吃一辈子,但不能一辈子只吃苹果。不然会发育不良。需要更多的水果
第二版如下。
可是每当 橘子换苹果,苹果换橘子的时候,或者需要更多水果的时候,竟然都要随着水果变化 这个太不合理。
让水果都继承水果的基类。人只和水果关联是更好的选择 。
到这里我们已经解决了对象的依赖倒置。对于对象的创建采用工厂是不错的选择。这里讲IOC。
就引入的一个新的容器类型来处理对象的创建。
public abstract class Fruit { } public class Apple : Fruit { } public class Container { private static Dictionary<Type, Type> dic = new Dictionary<Type, Type>(); public static void Register<TBase, TChild>() where TChild : TBase { Type t; if (!dic.TryGetValue(typeof(TBase), out t)) { dic.Add(typeof (TBase), typeof (TChild)); } } public static T Create<T>() { return (T) Create(typeof (T)); } public static object Create(Type type) { if (dic.ContainsKey(type)) { return Activator.CreateInstance(dic[type]); } else throw new NullReferenceException(); } }