Ejemplo n.º 1
0
        internal void SubscribeEvent()
        {
            List <Type> types = ExtendManager.GetEventSubscribers(this.GetType());

            if (types == null)
            {
                return;
            }

            foreach (Type t in types)
            {
                object     subscriber = t.FastNew();
                MethodInfo method     = t.GetMethod("SubscribeEvent", BindingFlags.Public | BindingFlags.Instance);
                if (method != null)
                {
                    method.FastInvoke(subscriber, this);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 尝试创建指定类型的扩展类,并且允许订阅实例事件。
        /// 注意:指定的类型必须包含无参数的构造方法。
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public static object New(this Type t)
        {
            if (t == null)
            {
                throw new ArgumentNullException("t");
            }

            Type extType = ExtendManager.GetExtendType(t);


            object instance = (extType == null)
                                                        ? t.FastNew()           // 没有扩展类型,就直接使用原类型
                                                        : extType.FastNew();    // 有扩展类型就创建扩展类型的实例

            // 供扩展类型订阅事件
            BaseEventObject obj = instance as BaseEventObject;

            if (obj != null)
            {
                obj.SubscribeEvent();
            }

            return(instance);
        }