Qual é a melhor fonte de informação sobre o DLR (.NET 4.0 beta 1)?
-
06-09-2019 - |
Pergunta
Atualmente estou pesquisando a 2ª edição do C # em profundidade, e tentando implementar "protocolo buffers dinâmicos" - nível ou seja, um apoio dinâmico no topo da minha biblioteca de buffer de protocolo existente. Como tal, que tem um tipo DlrMessage
derivado de DynamicObject
. Depois de um pouco de jogar em torno de eu consegui obtê-lo para responder às propriedades simples com muito pouco código, mas eu quero ir muito mais longe. - E para realmente entender o que está acontecendo
Até agora eu não encontrei qualquer boas explicações do DLR - e muitos dos posts são efetivamente fora da data agora, como as coisas mudaram (eu acredito) entre a CTP anterior e .NET 4.0 beta 1. a documentação do MSDN para DynamicObject é muito mínima no momento.
A minha consulta mais imediata é se existe uma maneira simples de dizer, "Use reflexão para ligar todas as chamadas que não pode segurar, utilizando este objeto particular." (Em outras palavras, eu quero aumentar a ligação em vez de fazer tudo sozinho, se possível reflexão existente.) Infelizmente eu não estou recebendo muito longe por adivinhação.
Existem quaisquer fontes definitivas e recentes de documentação que eu deveria saber? Estou ciente de que parte da escrita sobre uma nova tecnologia é exploração, mas uma mão de ajuda seria apreciada:)
Solução
Melhor fonte que eu encontrei e ler com frequência é a última anos no valor de posts Chris Burrow sobre seu blog .
Há também a que está fora da site principal DLR .
Outras dicas
Eu também estou pesquisando isso no momento e não há muita informação ainda. Eu não posso ajudar com sua consulta, mas abaixo estão algumas informações que eu encontrei:
Há uma quantidade justa dentro dos vídeos PDC.
http://channel9.msdn.com/pdc2008/TL44/
http://channel9.msdn.com/pdc2008/TL10/
Este artigo fala sobre como o DLR trabalha com IronPython: http://msdn.microsoft.com/en-us/magazine/cc163344.aspx
Há uma quantidade muito pequena na visualização kit de treinamento em: http://www.microsoft.com/downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&displayLang=en
Espero que isso ajude
Alex
Por DynamicObject padrão vai dizer "fallback para reflexão" se o seu Try * funções retornar falso. Então você já pode herdar e adicionar propriedades / campos / métodos para sua subclasse que tudo será tratado por reflexão se o caminho dinâmico não fazer a pesquisa.
Indo mais a fundo que você pode querer olhar para IDynamicMetaObjectProvider. Neste nível inferior a maneira de dizer fallback para a reflexão é chamar o Fallback * método no DynamicMetaObjetBinder entrada. Isso, então, permite que a língua chamando para fornecer a resolução. Você pode então voltar que AST ou compor-lo em um AST maior whcih você voltar. Basicamente Fallback * deixá-lo começar a AST que a linguagem chamando produziria incluindo o de corrigir o erro (exceção, indefinido na JS, etc ...).
A forma DynamicObject faz o fallback para reflexão é que ele realmente chama da pasta Fallback * método duas vezes. A primeira vez que ele cai para trás sem um parâmetro "errorSuggestion". Isto torna-se tanto o erro ou a AST, que foi construída usando a reflexão. Em seguida, ele produz um AST que é algo como:
if(TryGetMember("name", out value)) {
return value;
} else {
return resultOffallback;
}
Em seguida, leva este AST combinado e realmente entrega-nos como a sugestão de erro para a pasta em uma segunda alternativa. O ligante deve então respeitar esta errorSuggestion se a ligação não for bem sucedida. Mas, se o membro do .NET está presente, em seguida, errorSuggestion é jogado fora e vinculativa a NET tem precedência. E, finalmente, se o idioma não sabe se a ligação foi bem sucedida (por exemplo, a língua tem um "método faltando" característica tipo) pode novamente combinar as ASTs w / é verificações dinâmicas. Então, usando Fallback você não só pode dizer fazer reflexão, mas também você pode escolher se dinâmico ou membros estáticos têm precedência.