private T1 CreateProxy <T1, T2>(T1 target, InterceptorDelegate interceptor, Expression <Func <T1, T2> > propertyAccessor) { var property = (PropertyInfo)((MemberExpression)propertyAccessor.Body).Member; var propertyBasedInterceptor = new PropertyBasedInterceptorDecoration(property, interceptor, interceptor); var decoration = new InterceptorDecoration(null, new PropertyBasedInterceptorDecoration[] { propertyBasedInterceptor }); var generator = DynamicProxyClassGenerator.CreateInterfaceGenerator(typeof(T1), decoration); var proxyType = generator.GenerateProxyType(); return((T1)Activator.CreateInstance(proxyType, target, decoration)); }
private T1 CreateProxy <T1, T2>(InterceptorDelegate interceptor, Expression <Func <T1, T2> > propertyAccessor) { var property = (PropertyInfo)((MemberExpression)propertyAccessor.Body).Member; var propertyBasedInterceptor = new PropertyBasedInterceptorDecoration(property, interceptor, interceptor); var decoration = new InterceptorDecoration(null, new PropertyBasedInterceptorDecoration[] { propertyBasedInterceptor }); var generator = DynamicProxyClassGenerator.CreateVirtualMethodGenerator(typeof(T1), decoration); var proxyType = generator.GenerateProxyType(); var proxy = (T1)Activator.CreateInstance(proxyType); ((IInterceptorsInitializer)proxy).SetInterceptors(decoration); return(proxy); }