/// <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); }
/// <summary> /// 将拦截器融合入源类生成代理类 /// </summary> /// <param name="source">源类的类型</param> /// <param name="h">拦截器</param> /// <returns>代理类</returns> public dynamic NewInstanceProxy(Type source, IInterceptorHandler h) { return(NewInstanceProxy(source, h, defaultCreateMode)); }
/// <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); }