/// <summary> /// 使用公有静态方法名初始化指定类型的增强对象 /// <para>如果类型为空 则不使用任何增强</para> /// </summary> /// <param name="type">类型</param> /// <param name="methodName"> /// 公有静态方法名 /// <para>如果方法名为空,调用默认构造函数</para> /// </param> public AdviceAttribute(Type type, string methodName) { // 如果类型为空 则不使用任何增强 if (type == null) { this.Advice = null; return; } if (string.IsNullOrWhiteSpace(methodName)) { this.Advice = Activator.CreateInstance(type) as AdviceAbstract; return; } this.Advice = type.InvokeMember( methodName, System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static, null, null, null) as AdviceAbstract; }
/// <summary> /// 使用命名参数初始化指定类型的增强对象 /// </summary> /// <param name="namedParameter"> /// 以 冒号 和 分号 分割的形参的命名参数列表 /// <para>支持的数据类型有:string, int, bool 及 可通过静态方法Parse 反序列化的类型</para> /// </param> /// <param name="type"></param> private AdviceAttribute(string namedParameter, Type type) { this.Advice = ReflectionUtil.InvokeConstructor(type, namedParameter) as AdviceAbstract; }
/// <summary> /// 使用参数列表初始化指定类型的增强对象 /// </summary> /// <param name="type">类型</param> /// <param name="objs">参数列表</param> private AdviceAttribute(Type type, params object[] objs) { this.Advice = Activator.CreateInstance(type, objs) as AdviceAbstract; }