/// <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));
        }
Esempio n. 2
0
 /// <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));
 }