• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

IronPython for ASP.NET 的原理分析(一):如何在 CLR 类型上实现动态性 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

如何在 CLR 类型上实现 IronPython 语言的动态特性,简单的讲,可以通过 ICustomAttributes 接口来实现。

ICustomAttributes 接口是在 IronPython 引擎中定义的 。其成员是给 CLR 类型附加自定义属性的一些操作,一旦定义了这些附加的属性,IronPython 的脚本就通过引擎来访问它们。需要注意的是,这里所谓的属性是 Python 概念中的 attribute,它可以是 Python 函数,类,变量等。

namespace IronPython.Runtime {
    
public interface ICustomAttributes {
        
void DeleteAttr(ICallerContext context, SymbolId name);
        IDictionary
<objectobject> GetAttrDict(ICallerContext context);
        List GetAttrNames(ICallerContext context);
        
void SetAttr(ICallerContext context, SymbolId name, object value);
        
bool TryGetAttr(ICallerContext context, SymbolId name, out object value);
    }
}

在 IronPython for ASP.NET 中定义了三个类:ScriptUserControl, ScriptPage, ScriptMaster. 分别用于页面、用户控件、和母版页。研究了它们的实现后,我画了下面一张图描述其实现情况:



首先,这几个类分别继承自 ASP.NET 中原先的基类。即 System.Web.UI 名称空间下的 Page, UserControl 以及 MasterPage. 在继承了基类特性的同时,它们都实现了 ICustomAttributes 接口。

而在这几个类的内部,ICustomAttributes 接口是通过其成员 ScriptTemplateControl 来实现的,这里是一个桥接模式(Bridge Pattern)。因此,ScriptTemplateControl 才是真正的实现者,在 ScriptTemplateControl 中,实现了自动读取、分析页面相关的后台代码或内联代码,并关联相关的事件处理函数(Event Handlers),以及调用一般函数和数据绑定函数等许多重要的功能,在后续的文章中我会详细来分析其中的一些实现。




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
用asp.net实现远程获取其他网站页面指定内容[转]发布时间:2022-07-10
下一篇:
ASP.NET中弹出MessageBox的方法发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap