private void ProxyMethodTest(Int32 test) { //获取当前方法的签名字符串,注意!此处之所以不直接用获取到的方法信息, //是因为当前获取到的是动态生成的代理类的接口的方法的实现,并没有继承接口方法的特性 //详情请查看单元测试项目 Biobank.Function.TestUnit/ServiceModel/ServiceModelTest String methodSignName = System.Reflection.MethodBase.GetCurrentMethod().ToString(); //获取接口方法信息 var methodInfo = EmitMetadataCache.GetMethodInfo(_interfaceType, methodSignName); // _handler.InovkeHandle(this, _interfaceType, methodInfo,); }
public Object CreateProxy(Type interfaceType) { Object proxy = null; Start: Func <IInvokeHandler, Type, Object> proxyFunc = GetProxyCreateDelegate(interfaceType); if (proxyFunc == null) { lock (_SyncObject) { if (proxyFunc == null) { Type proxyType = GetProxyType(interfaceType); if (proxyType == null) { EmitMetadataCache.Add(interfaceType); proxyType = DynamicallyCreateProxyType(interfaceType); AddProxyTypeCache(interfaceType, proxyType); } //public DynamicProxy(IInvokeHandler handler,Type interfaceType) //Object proxy=(Object)(new ProxyType(handler,interfaceType)); var proxyTypeConstructor = proxyType.GetConstructor(new Type[] { typeof(IInvokeHandler), typeof(Type) }); var handlerParameterExpression = Expression.Parameter(typeof(IInvokeHandler)); var typeParameterExpression = Expression.Parameter(typeof(Type)); var newExpression = Expression.New(proxyTypeConstructor, new Expression[] { handlerParameterExpression, typeParameterExpression }); Expression castExpression = Expression.Convert(newExpression, typeof(Object)); proxyFunc = Expression.Lambda <Func <IInvokeHandler, Type, Object> >( newExpression, handlerParameterExpression, typeParameterExpression).Compile(); AddProxyCreateDelegateCache(interfaceType, proxyFunc); } else { goto Start; } } } var invokeHandler = this.InvokeHandlerFactory; invokeHandler.Initialize(); proxy = proxyFunc.Invoke(invokeHandler, interfaceType); return(proxy); }