1、手寫Unity容器--極致簡陋版Unity容器

模擬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(); } }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章