/// <summary> /// 使用指定的代理对象创建代理类型的实例,并将其代理委托设定为指定的委托。 /// </summary> /// <param name="baseType">原型类型,应为接口。</param> /// <param name="instance">要为其提供代理的对象。</param> /// <param name="handler">方法调用所用的代理委托。</param> /// <returns>一个为指定对象提供以指定委托定义的代理的代理类型的实例。</returns> /// <exception cref="ArgumentNullException"><paramref name="baseType"/> /// 或 <paramref name="instance"/> 为 <see langword="null"/>。</exception> /// <exception cref="ArgumentException"><paramref name="instance"/> /// 无法转换为 <see cref="WrapProxyTypeProvider.BaseType"/> 类型。</exception> public static object CreateWrapProxy( Type baseType, object instance, MethodInvokeHandler?handler = null) { if (baseType is null) { throw new ArgumentNullException(nameof(baseType)); } handler ??= DynamicProxyServices.DefaultHandler; var provider = WrapProxyTypeProvider.OfType(baseType); return(provider.CreateProxyInstance(instance, handler)); }
/// <summary> /// 初始化 <see cref="WrapProxyFactory{T}"/> 类的新实例,并将其代理委托设定为指定的委托。 /// </summary> /// <param name="handler">方法调用所用的代理委托。</param> /// <exception cref="ArgumentException"> /// <typeparamref name="T"/> 不是公共接口。</exception> /// <exception cref="ArgumentNullException"> /// <paramref name="handler"/> 为 <see langword="null"/>。</exception> public WrapProxyFactory(MethodInvokeHandler handler) { this.TypeProvider = WrapProxyTypeProvider.OfType(typeof(T)); this.Handler = handler ?? throw new ArgumentNullException(nameof(handler)); }