当前位置:编程学习 > C#/ASP.NET >>

Castle.DynamicProxy的问题,好像代理不起作用

业务接口
using System;
using System.Collections.Generic;
using System.Text;

namespace TestDynamicProxy
{
    inte易做图ce IClass
    {
        void Print();
    }
}

业务实现
using System;
using System.Collections.Generic;
using System.Text;

namespace TestDynamicProxy
{
    public class ClassA :IClass
    {
        #region IClass 成员

        public void Print()
        {
            System.Console.WriteLine("这是Class的Print()");
        }

        #endregion
    }
}

代理实现
using System;
using System.Collections.Generic;
using System.Text;
using Castle.DynamicProxy;
using Castle.Core;

namespace TestDynamicProxy
{
    public class MyDynamicProxy : Castle.Core.Interceptor.StandardInterceptor
    {
        public MyDynamicProxy()
            : base()
        {
            System.Console.WriteLine("创建MyDynamicProxy");
        }

        public new void Intercept(Castle.Core.Interceptor.IInvocation invocation)
        {
            
            System.Console.WriteLine("拦截执行:" + invocation.Method.Name);
            base.Intercept(invocation);

            //base.Intercept(invocation);
        }

        protected override void PostProceed(Castle.Core.Interceptor.IInvocation invocation)
        {
            System.Console.WriteLine("拦截执行:" + invocation.Method.Name);
        }

        protected override void PreProceed(Castle.Core.Interceptor.IInvocation invocation)
        {
            System.Console.WriteLine("拦截执行:" + invocation.Method.Name);
        }

    }
}

生成代理
using System;
using System.Collections.Generic;
using System.Text;
using Castle.Core;
using Castle.DynamicProxy;

namespace TestDynamicProxy
{
    class Program
    {
        static void Main(string[] args)
        {
      
            ProxyGenerator pg = new ProxyGenerator();
            try
            {
                MyDynamicProxy myd = new MyDynamicProxy();
                
                IClass ca = (IClass)pg.CreateClassProxy(typeof(ClassA), myd);
                ca.Print();
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
                System.Console.WriteLine(ex.StackTrace);
            }
            
            System.Console.Read();
        }
    }
}

在生成代理中调ca.Print();这个方法 打印不出来System.Console.WriteLine("拦截执行:" + invocation.Method.Name);
这个 
只有System.Console.WriteLine("这是Class的Print()");这个起了效果的 
用的是CastleDynamicProxy-2.1 
有哪位高手讲解下吗 呵呵 非常感谢!
没有分了,不好意思! --------------------编程问答-------------------- 问题已找到
using System;
using System.Collections.Generic;
using System.Text;

namespace TestDynamicProxy
{
    public class ClassA :IClass
    {
        #region IClass 成员

        public virtual void Print()
        {
            System.Console.WriteLine("这是Class的Print()");
        }

        #endregion
    }
}

应该让方法可以覆写 
太大意了 
希望这个小例子为后来者 有个参考 
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,