拦截动态属性访问器.NET 4

时间:2011-08-07 15:53:34

标签: c# dynamic .net-4.0 expando

这是一个有趣的问题(至少对我来说):是否有可能拦截对象中的任意属性访问器(getter / setter),这样我可以在其他地方重新路由该请求,例如私有成员对象?

我喜欢它,如果我可以让它看起来好像我的外部对象自动访问内部对象的某些内部属性(即除少数例外之外的所有内容),调用者不知道,实际上使外部“shell”对象的行为与内部对象相似,而不必手动创建映射到每个内部对象属性的属性。

可能有一种模式,但我的猜测是涉及手动将外部属性连接到内部属性。

2 个答案:

答案 0 :(得分:2)

我的开源框架ImpromptuInterface(在nuget上)有很多工具可供你做这些事情。它的主要功能是生成使用dlr实现和接口并转发调用的代理。

它还有很多functions可以让dlr调用以交互方式访问。以及DynamicObjects的一些示例为ImpromptuForwarder等有用的动态对象提供了起点。

答案 1 :(得分:0)

您可以尝试使用代理对象

http://www.codeproject.com/KB/cs/Emit_Proxy.aspx