O mecanismo injetor de propriedades do IronPython para ASP.NET pode simplificar a sintaxe de alguns códigos (para obter detalhes, consulte meu artigo), mas o suporte padrão parece estar incompleto ainda.
Descompilei Microsoft.Web.IronPython.dll e adicionei suporte de injeção de propriedade para RepeaterItem e Session (HttpSessionState).
O suporte para RepeaterItem é muito simples, pois já possui ControlAttributesInjector. Portanto, basta adicionar uma linha de código ao construtor estático de DynamicLanguageHttpModule.cs:
// item repetidor.
Ops.RegisterAttributesInjectorForType(typeof(RepeaterItem), novo ControlAttributesInjector(), false);
A sessão não tem tanta sorte. Esta classe implementa ICollection, mas não implementa a interface IDictionary. Portanto, não posso usar DictionaryAttributesInjector. De jeito nenhum, eu mesmo adicionei uma classe SessionAttributesInjector. O código é o seguinte:
usando IronPython.Runtime;
usando o sistema;
usando System.Collections;
usando System.Runtime.InteropServices;
usando System.Web.SessionState;
usando o namespace System.Diagnostics
Microsoft.Web.IronPython.AttributesInjectors {
// adicionado por Neil Chen.
classe interna SessionAttributesInjector: IAttributesInjector {
Lista IAttributesInjector.GetAttrNames(objeto obj) {
sessão HttpSessionState = obj como HttpSessionState;
Lista lista = new Lista();
foreach (chave de string em session.Keys) {
lista.Adicionar(chave);
}
lista de retorno;
}
bool IAttributesInjector.TryGetAttr (objeto obj, SymbolId nameSymbol, valor do objeto out) {
sessão HttpSessionState = obj como HttpSessionState;
valor = sessão[nomeSymbol.GetString()];
retornar verdadeiro;
}
}
}
Em anexo está meu Microsoft.Web.IronPython.dll modificado.
Deve-se observar que o injetor de atributos só é útil para operações get, como.
name = Session.Name está OK,
mas a configuração não está:
Session.Name = 'some name' reportará um erro.
Você ainda precisa usar esta sintaxe:
Sessão["Nome"] = 'algum nome'