Какой лучший источник информации о DLR (.NET 4.0 beta 1)? - PullRequest
21 голосов
/ 31 мая 2009

В настоящее время я исследую 2-е издание C # in Depth и пытаюсь реализовать «динамические буферы протокола» - то есть уровень динамической поддержки поверх моей существующей библиотеки буферов протокола. Таким образом, у меня есть тип DlrMessage, полученный из DynamicObject. После небольшой игры мне удалось заставить его реагировать на простые свойства с удивительно небольшим кодом, но я хочу пойти намного дальше - и действительно понять, что происходит.

Пока что я не нашел никаких хороших объяснений DLR - и многие посты в блоге фактически устарели, поскольку между предыдущей CTP и .NET 4.0 beta 1 произошли изменения. Документация MSDN для DynamicObject в настоящее время довольно минимальна.

Мой самый непосредственный вопрос: есть ли простой способ сказать: «Используйте отражение, чтобы связать любые вызовы, которые я не могу обработать, используя этот конкретный объект». (Другими словами, я хочу дополнить существующую привязку отражений, а не делать все самостоятельно, если это возможно.) К сожалению, я не слишком далеко ухожу от догадок.

Существуют ли какие-либо конкретные и последние источники документации, о которых мне следует знать? Я знаю, что часть написания о новой технологии - это исследование, но мы будем благодарны за помощь:)

Ответы [ 3 ]

23 голосов
/ 31 мая 2009

Лучший источник, который я часто встречал и читал, - это публикации Криса Барроу за последние годы в его блоге .

Есть также официальная страница документации по DLR , которая находится вне основного сайта DLR .

5 голосов
/ 31 мая 2009

Я тоже сейчас исследую это, и пока не так много информации. Я не могу помочь с вашим запросом, но ниже приведена некоторая информация, которую я нашел:

В видео с PDC есть достаточное количество.

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

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

В этой статье рассказывается о том, как DLR работает с IronPython: http://msdn.microsoft.com/en-us/magazine/cc163344.aspx

В предварительном просмотре учебного комплекта есть очень небольшое количество: http://www.microsoft.com/downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&displayLang=en

Надеюсь, это поможет

Alex

3 голосов
/ 01 июня 2009

По умолчанию DynamicObject скажет «отступление к отражению», если ваши функции Try * вернут false. Таким образом, вы уже можете наследовать и добавлять свойства / поля / методы в свой подкласс, которые будут обрабатываться отражением, если динамический путь не выполняет поиск.

Более подробно вы можете захотеть взглянуть на IDynamicMetaObjectProvider. На этом более низком уровне вы говорите, что откат к отражению - это вызов метода Fallback * для входящего DynamicMetaObjetBinder. Затем это позволяет языку вызова обеспечить разрешение. Затем вы можете вернуть этот AST или составить его в больший AST, который вы вернете. В основном Fallback * позволяет вам получить AST, который вызовет язык вызова, включая правильную ошибку (исключение, неопределенное в JS и т. Д.).

Способ, которым DynamicObject выполняет откат к отражению, заключается в том, что он фактически вызывает метод Fallback * переплета дважды. В первый раз он возвращается без параметра errorSuggestion. Получается либо ошибка, либо AST, построенный с использованием отражения. Затем он производит AST, который выглядит примерно так:

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

Затем он берет этот объединенный AST и фактически передает его в качестве предложения об ошибке для связующего при 2-м резерве. Связыватель должен затем соблюдать эту errorSuggestion, если привязка не удалась. Но если член .NET присутствует, то errorSuggestion выбрасывается, и привязка .NET имеет приоритет. И, наконец, если язык не знает, была ли привязка успешной (например, язык имеет функцию типа «метод отсутствует»), он может снова объединить AST с его динамическими проверками. Таким образом, используя Fallback, вы можете не только сказать «сделать отражение», но и выбрать, имеют ли динамический или статический член приоритет.

...