Example #1
0
        /// <summary>
        /// 获取Presenter需要处理的ViewLogic, 如果不存在实例, 则新建一个
        /// </summary>
        /// <param name="viewLogicType"></param>
        /// <returns></returns>
        public IViewLogic GetOrCreateViewLogic(Type viewLogicType)
        {
            // 先判断此类型的实例是否存在
            IViewLogic returnViewLogicInstance = this.view;

            if (returnViewLogicInstance == null)// 如果不存在, 则新建
            {
                var newViewLogicInstance = viewLogicType.Assembly.CreateInstance(viewLogicType.FullName);
                // 对 viewlogic 中的 presenters 进行赋值
                FieldInfo viewLogicPresentersFieldInfo = newViewLogicInstance.GetType().BaseType.GetField("presenters", BindingFlags.Instance | BindingFlags.NonPublic);
                if (viewLogicPresentersFieldInfo != null)
                {
                    viewLogicPresentersFieldInfo.SetValue(newViewLogicInstance, new List <IPresenter>()
                    {
                        this as IPresenter
                    });
                }


                EventInfo destoryViewLogic = newViewLogicInstance.GetType().GetEvent("DestoryViewLogicEvent");
                if (destoryViewLogic != null)
                {
                    destoryViewLogic.AddEventHandler(newViewLogicInstance, new EventHandler(DestroySingleViewLogic));
                }
                returnViewLogicInstance = newViewLogicInstance as IViewLogic;
                this.view = returnViewLogicInstance as TView;
            }

            return(returnViewLogicInstance);
        }
Example #2
0
        public IViewLogic GetLogicer(string id)
        {
            string     pageId  = id.ToLower();
            IViewLogic logicer = null;

            if (uiViewLogicerDic.TryGetValue(pageId, out logicer))
            {
                return(logicer);
            }

            Debug.LogError($"{id} 逻辑脚本尚未创建实例");
            return(null);
        }