zoukankan      html  css  js  c++  java
  • IronPython for ASP.NET 的原理分析(一):如何在 CLR 类型上实现动态性

    如何在 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. 分别用于页面、用户控件、和母版页。研究了它们的实现后,我画了下面一张图描述其实现情况:

    ipy_aspnet_3.jpg

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

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



  • 相关阅读:
    Ruby学习笔记5: 动态web app的建立 (2)
    Ruby学习笔记4: 动态web app的建立
    Ruby学习笔记3:Rendering(渲染)和 Redirect(重定向)
    对互联网垂直社交产品的分析
    测试 | 代码覆盖测试工具 | Eclemma
    Jquery | 基础 | 事件的链式写法
    Jquery | 基础 | html()
    Serervlet | 慕课课程实战 | 编写登录逻辑
    Jquery | 外部插入节点
    Jquery | 基础 | .hover()
  • 原文地址:https://www.cnblogs.com/RChen/p/ipy_aspnet_imp_1.html
Copyright © 2011-2022 走看看