Singleton + Proxy 模式+AOP

在.NET 中,可以通过CBO来实现简单的一个msg级别的AOP, 可以参考我以前写的一个简单例子. 采用AOP 的观点来 Log 所有方法的调用

昨天正好培训了一下Remoting, 其实可以用一个realproxy来wrap所有的方法调用,并且可以做一些拦截.为此参考一下简单的代码

事实上,包含了singleton,proxy模式,呵呵
None.gif
None.gif    
class  Demo:MarshalByRefObject
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
public void SayHello()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Console.WriteLine(
"Hello,China");
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private Demo()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private static Demo _ActInstance = new Demo();
InBlock.gif
InBlock.gif        
public static Demo GetInstance()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            DemoProxy dp 
= new DemoProxy(typeof(Demo),_ActInstance);
InBlock.gif            
return (Demo)dp.GetTransparentProxy();            
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif
None.gif
None.gif    
class  DemoProxy : System.Runtime.Remoting.Proxies.RealProxy
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
public DemoProxy(Type tp,Demo target) : base(tp) dot.gif{ _target=target;}
InBlock.gif
InBlock.gif        
private Demo _target;
InBlock.gif
InBlock.gif        
public override System.Runtime.Remoting.Messaging.IMessage Invoke(System.Runtime.Remoting.Messaging.IMessage msg)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Console.WriteLine(
">>> Inspecting Msg" + (msg as System.Runtime.Remoting.Messaging.IMethodCallMessage).MethodName); 
InBlock.gif            
return System.Runtime.Remoting.RemotingServices.ExecuteMessage(_target, (System.Runtime.Remoting.Messaging.IMethodCallMessage)msg);
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

其实Demo一定要从MBR继承,参考了don box 写的.net essential, 他提到了从MBR继承,.net clr 保证改类的方法不会被inline,这样就可以保证代理的正常工作.  如果从CBO继承,当然CBO是继承自MBR, proxy可以正常工作, 而且这时候new 一个CBO对象的时候,实际上该实例就是一个透明代理.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值