CodeGen编写自定义表达式标记
CodeGen编写自定义表达式标记
CodeGen支持开发人员通过编写plug-in modules插件模块来定义自定义表达式标记的能力,以提供与这些标记相关联的逻辑。这种plug-in modules插件机制的实现方式不需要开发人员编辑核心CodeGen源文件。这一点很重要,因为这意味着它不会妨碍将来将源代码更新下载到核心CodeGen环境的能力。
编写自定义表达式标记
类在程序集表达式中实现为自定义表达式。为了实现自定义表达式标记,开发人员创建一个包含一个或多个扩展类的类库程序集,并将该库与其他CodeGen程序集一起放入主CodeGen文件夹。
如果希望从其他位置加载自定义扩展,则可以将环境变量CODEGEN_EXTDIR设置为自定义令牌扩展程序集的位置。
当CodeGen加载时,它将检查是否有任何自定义标记程序集,如果找到任何自定义标记程序集,它将动态加载它们。为了实现这一点,使用了命名约定。任何自定义扩展程序集的名称必须以单词“custom”开头。例如,您可以选择创建一个名为自定义CustomTokens.dll。
实现自定义表达式标记的每个类,都必须实现接口CodeGen.Engine.IExpressionToken可以通过添加对代码CodeGenEngine.dll汇编库。
源代码示例
CodeGen源代码包包括一个名为CustomExtensionsExample的示例项目,其中包含实现所有类型的自定义表达式标记的示例。此项目被配置为在生成主解决方案时不生成,只是一个示例。鼓励开发人员在单独的解决方案中开发自定义表达式处理器。
下面的代码显示了自定义字段循环表达式标记的示例:
import System
import System.Collections.Generic
import CodeGen.Engine
import CodeGen.RepositoryAPI
namespace CustomExtensionsExample
;;To implement a
custom expression you must build a class that implements the
;;CodeGen.Engine.IExpressionToken interface. The class
MUST have a default constructor.
;;By default classes have an implicit default constructor,
but if you need to
;;explicitly define a constructor, make sure you don't
define any parameters.
;;
;;You can use this expression in field loops, like this:
;;
;; <FIELD_LOOP>
;; If you see YES then the
expression evaluated to true: <IF
CUSTOM_FIELD_LOOP_EXPRESSION>YES</IF>
;; </FIELD_LOOP>
;;
public class CustomFieldLoopExpression implements IExpressionToken
public property TokenName,
String
method get
proc
mreturn "CUSTOM_FIELD_LOOP_EXPRESSION"
endmethod
endproperty
public property Description,
String
method get
proc
mreturn "An
example of a custom field loop expression."
endmethod
endproperty
public property Validity,
TokenValidity
method get
proc
mreturn TokenValidity.FieldLoop
endmethod
endproperty
public method Evaluate,
Boolean
tkn, @Token
template, @FileNode
loops, @IEnumerable<LoopNode>
endparams
proc
lambda doEvaluate(str, field, index)
begin
;TODO: Add
code here to determine the result of the expression, and return true or false
mreturn true
end
mreturn ExpressionEvaluator.EvaluateFieldLoopExpression(tkn,
template, loops, doEvaluate)
endmethod
endclass
endnamespace
CodeGen编写自定义表达式标记的更多相关文章
- django “如何”系列4:如何编写自定义模板标签和过滤器
django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...
- 在 WF 4 中编写自定义控制流活动
在 WF 4 中编写自定义控制流活动 Leon Welicki 控制流是指组织和执行程序中各个指令的方法. 在 Windows Workflow Foundation 4 (WF 4) 中,控制流活动 ...
- (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)
在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...
- 用mel编写自定义节点的属性编辑器界面
用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...
- RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib
使用Python构建Lib工程 可以用来开发Python Lib的IDE工具有很多,常见的有Pycharm,Eclipse with PyDev插件等,而且在RobotFramework官网中也已经提 ...
- SpringBoot编写自定义的starter 专题
What’s in a name All official starters follow a similar naming pattern; spring-boot-starter-*, where ...
- SpringBoot编写自定义配置信息
⒈编写自定义配置类 1.浏览器配置 package cn.coreqi.security.properties; public class BrowserProperties { private St ...
- R语言-编写自定义函数 ZZ
一.函数构造器 每一个R函数都包括三个部分:函数名,程序主体以及参数集合,在编写自定义R函数时,需要将三个部分各自储存在一个R对象中.这里需要使用function函数,形如: my_function& ...
- Django 编写自定义的 404 / 500 报错界面
Django 编写自定义的 404 / 500 报错界面 1. 首先 setting.py 文件中的 debug 参数设置成 false ,不启用调试. DEBUG = False 2. 在 temp ...
随机推荐
- hdu3714 水三分
题意: 给你一些函数 y = ax^2 + bx + c,的a >= 0 的二次函数,x的范围是0--1000, 问你在这个范围内函数值最大的最小是多少,最大指的是对于某一个x最大的 ...
- CVE-2010-2553:Microsoft Cinepak Codec CVDecompress 函数堆溢出漏洞调试分析
0x01 前言 微软提供一个叫 Cinepak 的视频解码器,通过调用 iccvid.dll 这个动态链接库文件可以使用这个解码器:微软自带的 Windows Media Player(视频音频软件) ...
- base标签的作用
base标签可以自定义当前页面的相对路径,不受浏览器当前地址栏的影响,以base标签定义的地址为准 (只对相对路径起作用) <head> <meta charset="UT ...
- thinkphp中常用到的sql操作
1.清空某表数据: $sql = 'truncate table table_name'; Db::execute($sql );
- postman Variables变量的详解与应用
变量 变量类型(按照作用域划分) 全局变量(全局环境里面的变量) 集合变量(请求集合里声明的变量) 自定义环境变量 数据变量(在runner时文件变量) 本地变量 变量权重类型 全局变量 < 集 ...
- 关于ollydbg的堆栈视图的使用(结合crackme2分析)
在crackme2中我们通过在弹出的窗口处下段然后逐层往用户区回溯,我们利用不断下断点和反复运行程序回溯,其实可以利用Ollydbg的堆栈视图来完成, ollydbg的堆栈视图反映了程序在运行期间函数 ...
- Camera.main
在Unity项目的C#代码中可以看到Camera.main.transform.position.Camera.main.transform.eulerAngles.Camera.main.trans ...
- 消息队列RabbitMQ(三):消息确认机制
引言 RabbitMQ的模型是生产者发送信息到 Broker (代理),消费者从 Broker 中取出信息.但是生产者怎么知道消息是否真的发送到 Broker 中了呢?Broker 又怎么知道消息到底 ...
- golang:三次握手四次挥手总结
TCP的三次握手 所谓三次握手 Three-Way Handshake 是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立.好比两个人在打电话: 当连接被建立或被终止,交换的报 ...
- [bug] HDFS:DataXceiver error processing WRITE_BLOCK operation
文件格式有误,导致读取错误,我的是把制表符敲成了空格