Domanda

Al momento sto ricercando la 2 ° edizione di C # in profondità, e cercando di attuare "buffer di protocollo dinamici" - vale a dire un livello di supporto dinamico in cima alla mia libreria di buffer di protocollo esistente. Come tale, ho un tipo DlrMessage derivato da DynamicObject. Dopo un po 'di suonare in giro sono riuscito a farlo rispondere a semplici proprietà con ben poco codice, ma voglio andare molto più lontano -. E per capire realmente cosa sta succedendo

Finora non ho trovato alcun buone spiegazioni del DLR - e un sacco di post del blog sono effettivamente fuori di data ora, come le cose sono cambiate (credo) tra il CTP precedente e .NET 4.0 beta 1. il documentazione MSDN per DynamicObject è piuttosto minimale al momento.

La mia domanda più immediata è se c'è un modo semplice per dire, "Usa riflessione per legare tutte le chiamate non riesco a gestire, utilizzare questo particolare oggetto." (In altre parole, voglio aumentare il legame piuttosto che fare tutto da solo, se possibile, di riflessione esistente.) Purtroppo non sto ottenendo molto lontano da congetture.

Ci sono fonti definitive e le recenti della documentazione che dovrei sapere? Sono consapevole del fatto che parte di scrivere di una nuova tecnologia di è di esplorazione, ma una mano sarebbe apprezzato:)

È stato utile?

Soluzione

Best fonte che ho trovato e letto spesso sono gli ultimi anni di valore di tutti i messaggi di Chris Burrow su suo blog .

C'è anche le href="http://www.codeplex.com/dlr/Wiki/View.aspx?title=Docs%20and%20specs" pagina ufficiale di documentazione DLR che è fuori dal .

Altri suggerimenti

Anche io sto occupando in questo momento e non c'è troppa informazioni ancora. Non posso fare con la query, ma qui di seguito alcune informazioni che ho trovato:

C'è una discreta quantità all'interno dei video PDC.

http://channel9.msdn.com/pdc2008/TL44/

http://channel9.msdn.com/pdc2008/TL10/

Questo articolo parla di come la DLR funziona con IronPython: http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

C'è una quantità molto piccola nel kit di formazione Anteprima: http://www.microsoft.com/downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&displayLang=en

Spero che questo aiuti

Alex

Per impostazione predefinita DynamicObject dirà "posizione di sicurezza a riflessione", se le funzioni Try * restituiscono falso. Così si può già ereditare e aggiungere proprietà / campi / metodi per la sottoclasse che saranno tutti gestiti dalla riflessione se il percorso dinamico non fa la ricerca.

Andando più in profondità si potrebbe desiderare di guardare IDynamicMetaObjectProvider. A questo livello più basso è il modo in cui dici fallback alla riflessione è quello di chiamare il fallback * metodo sul DynamicMetaObjetBinder in entrata. Questo consente quindi la lingua chiamata a fornire la risoluzione. È quindi possibile tornare che l'AST o comporre in un grande AST pagherei ritorni. Fondamentalmente Fallback * lasciare che si ottiene l'AST che la lingua chiamata produrrebbe tra cui l'errore corretto (eccezione, indefinito in JS, etc ...).

Il modo DynamicObject fa il fallback alla riflessione è che in realtà chiama Fallback * il metodo del legante due volte. La prima volta che cade indietro senza un parametro "errorSuggestion". Questo diventa sia l'errore o l'AST che è stato costruito utilizzando la riflessione. Si produce quindi un AST che è qualcosa come:

if(TryGetMember("name", out value)) {
   return value;
} else {
   return resultOffallback;
}

Ci vuole allora questo AST combinato e in realtà lo passa come il suggerimento di errore per il legante su un 2 ° fallback. Il legante deve quindi rispettare questo errorSuggestion se l'associazione è riuscita. Ma se il membro .NET è presente allora errorSuggestion si butta via e vincolante .NET ha la precedenza. E, infine, se la lingua non sa se l'accoppiamento ha avuto successo (per esempio il linguaggio ha un "metodo mancante" caratteristica tipo) può ancora combinare le AST w / è controlli dinamici. Quindi, utilizzando Fallback non si può solo dire che fare riflessione, ma anche si può scegliere se i membri dinamici o statici hanno la precedenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top