扩展 IronPython for ASP.NET:编写自定义属性注入器
来源:互联网 发布:js 获取div id 编辑:程序博客网 时间:2024/05/16 23:46
IronPython for ASP.NET 的属性注入器机制可以使得一些代码的语法变得简单(详细了解参考我的这一篇),但是默认的支持似乎现在还很不完备。
我反编译了 Microsoft.Web.IronPython.dll,在其中增加了对 RepeaterItem 和 Session (HttpSessionState) 的属性注入支持。
对 RepeaterItem 的支持很简单,因为本身已经有了 ControlAttributesInjector. 所以只要在 DynamicLanguageHttpModule.cs 的静态构造器中加一行代码即可:
而 Session 则不那么幸运,这个类实现了 ICollection,但是确没有实现 IDictionary 接口。所以就无法利用 DictionaryAttributesInjector. 没办法,我自己给加了个 SessionAttributesInjector 类。代码如下:
附上我修改过的 Microsoft.Web.IronPython.dll
需要说明的是,属性注入器只对 get 操作有用,比如
name = Session.Name 是可以的,
但是设置则不行:
Session.Name = 'some name' 会报错。
还是需要用这个语法:
Session["Name"] = 'some name'
我反编译了 Microsoft.Web.IronPython.dll,在其中增加了对 RepeaterItem 和 Session (HttpSessionState) 的属性注入支持。
对 RepeaterItem 的支持很简单,因为本身已经有了 ControlAttributesInjector. 所以只要在 DynamicLanguageHttpModule.cs 的静态构造器中加一行代码即可:
// repeater item
Ops.RegisterAttributesInjectorForType(typeof(RepeaterItem), new ControlAttributesInjector(), false);
Ops.RegisterAttributesInjectorForType(typeof(RepeaterItem), new ControlAttributesInjector(), false);
而 Session 则不那么幸运,这个类实现了 ICollection,但是确没有实现 IDictionary 接口。所以就无法利用 DictionaryAttributesInjector. 没办法,我自己给加了个 SessionAttributesInjector 类。代码如下:
using IronPython.Runtime;
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Web.SessionState;
using System.Diagnostics;
namespace Microsoft.Web.IronPython.AttributesInjectors {
// added by Neil Chen.
internal class SessionAttributesInjector: IAttributesInjector {
List IAttributesInjector.GetAttrNames(object obj) {
HttpSessionState session = obj as HttpSessionState;
List list = new List();
foreach (string key in session.Keys) {
list.Add(key);
}
return list;
}
bool IAttributesInjector.TryGetAttr(object obj, SymbolId nameSymbol, out object value) {
HttpSessionState session = obj as HttpSessionState;
value = session[nameSymbol.GetString()];
return true;
}
}
}
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Web.SessionState;
using System.Diagnostics;
namespace Microsoft.Web.IronPython.AttributesInjectors {
// added by Neil Chen.
internal class SessionAttributesInjector: IAttributesInjector {
List IAttributesInjector.GetAttrNames(object obj) {
HttpSessionState session = obj as HttpSessionState;
List list = new List();
foreach (string key in session.Keys) {
list.Add(key);
}
return list;
}
bool IAttributesInjector.TryGetAttr(object obj, SymbolId nameSymbol, out object value) {
HttpSessionState session = obj as HttpSessionState;
value = session[nameSymbol.GetString()];
return true;
}
}
}
附上我修改过的 Microsoft.Web.IronPython.dll
需要说明的是,属性注入器只对 get 操作有用,比如
name = Session.Name 是可以的,
但是设置则不行:
Session.Name = 'some name' 会报错。
还是需要用这个语法:
Session["Name"] = 'some name'
- 扩展 IronPython for ASP.NET:编写自定义属性注入器
- 扩展 IronPython for ASP.NET:编写自定义属性注入器
- IronPython for ASP.NET CTP
- IronPython for ASP.NET 部署注意事项
- IronPython 中的属性注入器机制
- IronPython for ASP.NET 的支持更新了
- IronPython for ASP.NET CTP WhitePaper 摘要翻译
- 【转载】SciPy for .NET & IronPython
- [翻译]修改 .NET 对象使其在 IronPython 中表现出动态性(属性注入)
- Asp.net防注入组件的编写
- IronPython for ASP.NET CTP
- 在 IronPython for ASP.NET 中改写 print 以方便调试
- 第一个 IronPython 的 ASP.NET 程序
- asp.net如何编写自定义控件
- asp.net如何编写自定义控件
- IronPython for ASP.NET 的原理分析(一):如何在 CLR 类型上实现动态性
- 防注入组件的编写 (asp.net C#)
- ASP.NET 母板页自定义属性
- It is a long time.
- 和他谈话
- 通用ShellCode深入剖析
- Privoxy + tor = ?
- 休息了一周,上班了。
- 扩展 IronPython for ASP.NET:编写自定义属性注入器
- 3G系列
- C语言与C++与JAVA的区别
- Microsoft WPF/E vs Adobe Apollo
- 使用.NET 2.0中的秒表-Stopwatch类进行速度测试
- Java 泛型编程快速入门
- 本周看完 JTable
- 一道智力题(某公司笔试题)
- [转贴]3G商用呼之欲出 供应商各显身手招聘3G人才[来源:CSDN]