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); } } }
/// <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); }