本人近期开始学习Castle,希望与大家进行交流。通过分析DynamicProxy自带的
测试例子,发现DynamicProxy1.1.5的功能如下。希望对初学者有一定的帮助

(1):支持没有公共构造函数的类,能截获非公共virtual方法的调用
(2):只有虚方法(属性)能被Intercept
(3):能区分不同命名空间下的同名类
(4):对集合ArrayList的支持
   

[Test]
public void ProxyArrayListICollectionCtor()
{
  ProxyGenerator generator 
= new ProxyGenerator();
  ArrayList list 
= (ArrayList)generator.CreateClassProxy(typeof(ArrayList),new StandardInterceptor(), (ICollection)new int[]{1,2,3});
  Assert.AreEqual(
3,list.Count);
}
(5)支持序列化
(6)提供mixin功能.
此外Dynamic还提供了对System.Reflection.Emit功能的封装
例:
EasyType typebuilder = new EasyType( module, "GxAdd" );
           FieldReference fdX 
= typebuilder.CreateField( "X"typeof(int) );
           FieldReference fdY 
= typebuilder.CreateField( "Y"typeof(int) ); 
           ArgumentReference arg1 
= new ArgumentReference(typeof(int));
           ArgumentReference arg2 
= new ArgumentReference(typeof(int));
           EasyConstructor constr 
= typebuilder.CreateConstructor(arg1,arg2);
           constr.CodeBuilder.InvokeBaseConstructor();
           constr.CodeBuilder.AddStatement( 
new AssignStatement( fdX, arg1.ToExpression() ) );
           constr.CodeBuilder.AddStatement( 
new AssignStatement( fdY, arg2.ToExpression() ) );
           constr.CodeBuilder.AddStatement( 
new ReturnStatement() );


           EasyMethod WriteMethod 
= typebuilder.CreateMethod( "AddXY",new ReturnReferenceExpression( typeof(int) ));
           Type[] wlParams 
= new Type[] {    typeof(object),
                                            
typeof(object)}
;
         
           MethodInfo WriteLine 
= typeof(Console).GetMethod("WriteLine",wlParams);
           
           WriteMethod.CodeBuilder.AddStatement(
new ReturnStatement( 
               
new BinaryExpression( BinaryExpression.Add, fdX.ToExpression(), fdY.ToExpression() ) ));
           
return typebuilder.BuildType();
以上代码能产生如下的两个数相加的功能.
能否通过Castle.DynamicProxy动态产生如下代码:
       void WriteData(int x ,int y)
       {
          Console.WriteLine("{0},{1}",x,y);
       }