Ejemplo n.º 1
0
        /// <summary>
        /// 将拦截器融合入源类生成代理类
        /// </summary>
        /// <param name="source">源类的类型</param>
        /// <param name="h">拦截器</param>
        /// <param name="createMode">代理类创建模式</param>
        /// <returns>代理类</returns>
        public dynamic NewInstanceProxy(Type source, IInterceptorHandler h, ProxyCreateMode createMode)
        {
            Type   dynamicProxyClassType = null;
            string proxyClassName        = source.Name + ConstVar.ProxyClassSuffix;

            try
            {
                lock (cache)
                {
                    if (cache.ContainsKey(proxyClassName))
                    {
                        dynamicProxyClassType = cache[proxyClassName];
                    }
                    else
                    {
                        dynamicProxyClassType = DefineClass(proxyClassName, source, createMode);
                        cache.Add(proxyClassName, dynamicProxyClassType);
                        assembly.Save(moduleName);
                    }
                }
            }
            catch (Exception ex)
            {
                var exception = new CanNotCreateException(source.Name + "代理类", ex);
                throw exception;
            }

            var constructor = dynamicProxyClassType.GetConstructor(new[] { typeof(IInterceptorHandler) });
            var proxyObj    = constructor.Invoke(new object[] { h });

            return(proxyObj);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 将拦截器融合入源类生成代理类
 /// </summary>
 /// <param name="source">源类的类型</param>
 /// <param name="h">拦截器</param>
 /// <returns>代理类</returns>
 public dynamic NewInstanceProxy(Type source, IInterceptorHandler h)
 {
     return(NewInstanceProxy(source, h, defaultCreateMode));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 将拦截器融合入源类生成代理类
        /// </summary>
        /// <param name="source">源类的某个实例</param>
        /// <param name="h">拦截器</param>
        /// <param name="createMode">代理类创建模式</param>
        /// <returns>代理类</returns>
        public dynamic NewInstanceProxy <T>(T source, IInterceptorHandler h, ProxyCreateMode createMode)
        {
            var obj = this.NewInstanceProxy(typeof(T), h, createMode);

            return(obj);
        }