IronPython for ASP.NET のプロパティ インジェクター メカニズムは、一部のコードの構文を単純にすることができます (詳細については、私の記事を参照してください) が、デフォルトのサポートはまだ不完全のようです。
Microsoft.Web.IronPython.dll を逆コンパイルし、RepeaterItem と Session (HttpSessionState) のプロパティ インジェクション サポートを追加しました。
ReplyerItem のサポートは、すでに ControlAttributesInjector があるため、非常に簡単です。そのため、DynamicLanguageHttpModule.cs の静的コンストラクターにコード行を追加するだけです。
// リピーター アイテム。
Ops.RegisterAttributesInjectorForType(typeof(RepeaterItem), new ControlAttributesInjector(), false);
セッションはそれほど幸運ではありません。このクラスは ICollection を実装しますが、IDictionary インターフェイスを実装しません。つまり、DictionaryAttributesInjector を使用することはできません。SessionAttributesInjector クラスを自分で追加しました。コードは次のとおりです。IronPython.Runtime
を使用します。
システムを使用する;
System.Collections を使用します。
System.Runtime.InteropServices を使用します。
System.Web.SessionState を使用します。
System.Diagnostics
名前空間を使用します。 Microsoft.Web.IronPython.AttributesInjectors {
// ニール・チェンによって追加されました。
内部クラス SessionAttributesInjector: IAttributesInjector {
リスト IAttributesInjector.GetAttrNames(object obj) {
HttpSessionState session = obj as HttpSessionState;
リスト list = new List();
foreach (session.Keys の文字列キー) {
list.Add(キー);
}
リストを返す;
bool IAttributesInjector.TryGetAttr(オブジェクト obj, SymbolId nameSymbol, out オブジェクト値)
{
HttpSessionState session = obj as HttpSessionState;
値 = セッション[nameSymbol.GetString()];
true を返します。
}
}
ます
。
属性インジェクターは、次のような取得操作にのみ役立つことに注意してください。
name = Session.Name は問題ありませんが、
設定が正しくありません:
Session.Name = 'some name' はエラーを報告します。
それでも次の構文を使用する必要があります。
Session["名前"] = '何らかの名前'