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

yuqiuyang 2009-12-04 11:28:05
业务接口
using System;
using System.Collections.Generic;
using System.Text;

namespace TestDynamicProxy
{
interface 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
有哪位高手讲解下吗 呵呵 非常感谢!
没有分了,不好意思!
...全文
263 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuqiuyang 2009-12-04
  • 打赏
  • 举报
回复
问题已找到
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
}
}

应该让方法可以覆写
太大意了
希望这个小例子为后来者 有个参考

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧