/// <summary> /// 使用默认构造函数创建指定类型的直接代理类型的实例,并将其代理委托设定为指定的委托。 /// </summary> /// <param name="baseType">原型类型,应为接口或非密封类。</param> /// <param name="handler">方法调用所用的代理委托。</param> /// <returns>一个不使用参数创建并使用指定代理委托的代理类型的实例。</returns> /// <exception cref="ArgumentException"> /// <paramref name="baseType"/> 不是公共接口,也不是公共非密封类。</exception> /// <exception cref="MissingMethodException"> /// <paramref name="baseType"/> 类型不包含无参构造函数。</exception> /// <exception cref="MethodAccessException"> /// <paramref name="baseType"/> 类型的无参构造函数访问级别过低。</exception> public static object CreateDirectProxy(Type baseType, MethodInvokeHandler?handler = null) { if (baseType is null) { throw new ArgumentNullException(nameof(baseType)); } handler ??= DynamicProxyServices.DefaultHandler; var provider = DirectProxyTypeProvider.OfType(baseType); return(provider.CreateProxyInstance(Array.Empty <object>(), handler)); }
/// <summary> /// 初始化 <see cref="DirectProxyFactory{T}"/> 类的新实例,并将其代理委托设定为指定的委托。 /// </summary> /// <param name="handler">方法调用所用的代理委托。</param> /// <exception cref="ArgumentException"> /// <typeparamref name="T"/> 不是公共接口,也不是公共非密封类。</exception> /// <exception cref="ArgumentNullException"> /// <paramref name="handler"/> 为 <see langword="null"/>。</exception> public DirectProxyFactory(MethodInvokeHandler handler) { this.TypeProvider = DirectProxyTypeProvider.OfType(typeof(T)); this.Handler = handler ?? throw new ArgumentNullException(nameof(handler)); }