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#