模擬Unity容器實例化AndroidPhone
思路:
1、註冊類型:把類型完整名稱作爲key添加到數據字典中,類型添加到數據字典的value中
2、獲取實例:根據完整類型名稱也就是key取出value,用反射創建類型的實例
1、IPhone接口
namespace SimplestUnity { interface IPhone { void Call(); } }
2、AndroidPhone實現
namespace SimplestUnity { public class AndroidPhone:IPhone { public AndroidPhone() { Console.WriteLine("{0}構造函數", this.GetType().Name); } public void Call() { Console.WriteLine("{0}打電話", this.GetType().Name); } }
}
3、容器--接口
namespace SimplestUnity { public interface IDaivdContainer { void RegisterType<TFrom, TTo>(); T Resolve<T>(); } }
4、容器--實現
namespace SimplestUnity { public class DaivdContainer:IDaivdContainer { private Dictionary<string, Type> containerDictionary = new Dictionary<string, Type>();//字典 public void RegisterType<TFrom, TTo>() { containerDictionary.Add(typeof(TFrom).FullName, typeof(TTo)); } public T Resolve<T>() { Type type = containerDictionary[typeof(T).FullName]; return (T)Activator.CreateInstance(type); } } }
5、調用
class Program { static void Main(string[] args) { DaivdContainer davidContainer = new DaivdContainer(); davidContainer.RegisterType<IPhone, AndroidPhone>(); IPhone iphone = davidContainer.Resolve<IPhone>();
iphone.Call(); } }