Pregunta

Actualmente estoy investigando la 2ª edición de C # en profundidad, y tratando de poner en práctica "búferes de protocolo dinámicos" - es decir, un nivel de soporte dinámico en la parte superior de mi biblioteca de búfer de protocolo existente. Como tal, tengo un tipo DlrMessage derivado de DynamicObject. Después de un poco de jugar un rato que he logrado conseguir que responda a las propiedades simples con muy poco código, pero yo quiero ir mucho más lejos -. Y para entender realmente lo que está pasando

Hasta el momento no he encontrado ninguna buena explicación del DLR - y muchas de las entradas del blog están efectivamente fuera de fecha ahora, como han cambiado las cosas (creo) entre el CTP anterior y .NET 4.0 beta 1. el documentación de MSDN para DynamicObject es bastante escaso en el momento.

Mi consulta más inmediata es si hay una forma sencilla de decir, "Uso de reflexión para unir todas las llamadas que no pueda manejar, usar este objeto en particular." (En otras palabras, quiero para aumentar la reflexión enlace existente en lugar de hacer todo yo mismo, si es posible.) Por desgracia, no estoy muy lejos por conjeturas.

¿Hay fuentes definitivas y recientes de la documentación que deba saber? Soy consciente de que parte de escribir sobre una nueva tecnología es exploración, pero una mano de ayuda sería apreciada:)

¿Fue útil?

Solución

La mejor fuente que he encontrado y leído con frecuencia es los últimos años el valor de los puestos de Chris Burrow sobre su blog .

Hay también los href="http://www.codeplex.com/dlr/Wiki/View.aspx?title=Docs%20and%20specs" página oficial de la documentación DLR que está fuera de la .

Otros consejos

Yo también estoy investigando esto en el momento y aún no existe demasiada información. No puedo ayudar con su consulta, pero a continuación encontrará información que he encontrado:

Hay una cantidad justa dentro de los videos de PDC.

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

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

Este artículo habla de cómo el DLR trabaja con IronPython: http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

Hay una muy pequeña cantidad en la vista previa kit de entrenamiento en: http://www.microsoft.com/downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&displayLang=en

Espero que esto ayude

Alex

Por defecto DynamicObject dirán "repliegue a la reflexión" si sus funciones * Trate devuelven false. Así ya se puede heredar y añadir propiedades / campos / métodos de la subclase que todo ser manejado por reflexión si la ruta dinámica no hace las operaciones de búsqueda.

El ir más en profundidad es posible que desee mirar a IDynamicMetaObjectProvider. En este nivel más bajo de la manera que usted dice de repliegue a la reflexión es llamar al método de retroceso * en el DynamicMetaObjetBinder entrante. Esto entonces permite que el idioma, pidiendo para proporcionar la resolución. A continuación, puede volver que AST o componer en un AST mayor que regrese lo que se agradece. Básicamente repliegue * le permiten obtener la AST que el idioma, pidiendo produciría incluyendo el error correcto (excepción, no definido en JS, etc ...).

La forma DynamicObject hace el retorno a la reflexión es que en realidad llama repliegue * Método del ligante dos veces. La primera vez que se cae de nuevo sin un parámetro "errorSuggestion". Esto se pone bien el error o la AST, que fue construido utilizando la reflexión. Se produce entonces un AST, que es algo así como:

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

A continuación, toma esta AST combinado y de hecho lo entrega en la que la sugerencia de error para el aglutinante en una segunda reserva. El aglutinante entonces debe respetar este errorSuggestion si la unión es éxito. Pero si el miembro de .NET está presente, entonces errorSuggestion se tira y vinculante .NET tiene prioridad. Y finalmente, si el idioma no sabe si el a sido un éxito (por ejemplo, el lenguaje tiene una función de tipo "método que falta") se puede volver a combinar los AST w / es comprobaciones dinámicas. Así, utilizando repliegue no sólo se puede decir que hacer la reflexión, pero también se puede elegir si los miembros dinámicos o estáticos tienen prioridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top