コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }