ASP.NET용 IronPython의 속성 인젝터 메커니즘을 사용하면 일부 코드의 구문을 간단하게 만들 수 있지만(자세한 내용은 내 기사를 참조하세요) 기본 지원은 아직 불완전한 것 같습니다.
Microsoft.Web.IronPython.dll을 디컴파일하고 RepeaterItem 및 Session(HttpSessionState)에 대한 속성 주입 지원을 추가했습니다.
RepeaterItem에 대한 지원은 이미 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
사용
// Neil Chen이 추가했습니다.
내부 클래스 SessionAttributesInjector: IAttributesInjector {
IAttributesInjector.GetAttrNames 나열(객체 obj) {
HttpSessionState 세션 = obj as HttpSessionState;
목록 목록 = new List();
foreach(session.Keys의 문자열 키) {
목록.추가(키);
}
반환 목록;
}
bool IAttributesInjector.TryGetAttr(object obj, SymbolId nameSymbol, out object value) {
HttpSessionState 세션 = obj as HttpSessionState;
값 = 세션[nameSymbol.GetString()];
사실을 반환;
}
}
}
첨부된 내용은 수정된 Microsoft.Web.IronPython.dll입니다.
속성 인젝터는 다음과 같은 가져오기 작업에만 유용하다는 점에 유의해야 합니다.
name = Session.Name은 괜찮지만
설정은 그렇지 않습니다.
Session.Name = 'some name'은 오류를 보고합니다.
여전히 다음 구문을 사용해야 합니다.
세션["이름"] = '어떤 이름'