Библиотека утиного набора текста для Silverlight?

Есть ли какая-нибудь библиотека утиного ввода для Silverlight? Есть несколько вариантов для полноценной платформы .NET, но я ищу что-нибудь более легкое.


person Karol Kolenda    schedule 28.09.2009    source источник


Ответы (5)


Задавая вопрос «Silverlight duck typing», вы имеете в виду автоматическую реализацию интерфейсов со строгой типизацией? Или динамическое создание метаданных объекта с помощью экземпляра объекта?

Если последнее, то рекомендация Энтони верна. Языки со строгой типизацией, работающие в среде CLR (C # и VB.NET), не могут поддерживать истинную динамическую типизацию «утка». Таким образом, вы можете использовать IronRuby или IronPython, которые поставляются как часть проекта Silverlight DLR.

Если вы ищете первое, то вы, по сути, ищете фиктивную библиотеку. Silverlight поддерживает множество фреймворков с открытым исходным кодом.

Moq - http://code.google.com/p/moq/ (загрузить: http://moq.googlecode.com/files/Moq.Silverlight.4.0.812.4-bin.zip)

RhinoMocks - http://ayende.com/projects/rhino-mocks.aspx (загрузить: http://ayende.com/20/section.aspx/download/230).

AutoFac - http://code.google.com/p/autofac/ (загрузить: http://autofac.googlecode.com/files/Autofac-1.4.4.572-SL3.zip)

TypeMock / SilverUnit - http://cthru.codeplex.com (загрузить: http://cthru.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27748#DownloadId=69201)

person Community    schedule 28.09.2009
comment
Спасибо, Джастин, я имел в виду автоматическую реализацию интерфейсов. Я просто не понимал, что насмешка была ключевым словом - без особого успеха пытался google duck typeing + silverlight. - person Karol Kolenda; 28.09.2009

Вы можете рассмотреть возможность использования языка на основе DLR, например Python в Silverlight

person AnthonyWJones    schedule 28.09.2009

В зависимости от вашей интерпретации утиной печати, я надеюсь, что это появится в C # 4.0 и dynamic, когда это станет доступным в Silverlight. Затем вы можете выбрать, какие биты являются типизированными (dynamic) или статическими (все остальное). Все в C #.

dynamic duck = /* pretty much anything */
duck.Quack();
person Marc Gravell    schedule 28.09.2009
comment
Начиная с предварительной версии 2010 года, вы наверняка сможете использовать этот тип набора текста. К сожалению, вы не можете заставить объект реализовать интерфейс, который он еще не реализует ... даже если он соответствует контракту интерфейса. Другими словами, код, использующий утку, должен зависеть от dynamic, а не от IQuacker. Я надеюсь, что они включат эту возможность в RTM ofr 4.0 (и SL 4.0), потому что это было бы убийственным для абстрагирования классов фреймворка. - person Brian Genisio; 29.09.2009
comment
AFAIK нет плана реализовать то, что вы описываете. - person Marc Gravell; 29.09.2009

Недавно я создал служебную программу, которую я назвал DynamicWrapper. Он использует Reflection.Emit для генерации класса-оболочки на лету, который реализует интерфейс - способ добиться утиной печати на C #.

К сожалению, в Silverlight это не работает. Он очень хорошо работает в .Net 3.5, и мои тесты прошли в моей среде SL, но во время выполнения SL я получаю исключение безопасности.

У меня не было времени разбираться в этом, но код довольно прост. Может быть, этот код укажет вам верное направление?

person Brian Genisio    schedule 29.09.2009
comment
Спасибо, Брайан, я рассмотрю твое решение поближе. - person Karol Kolenda; 30.09.2009

ImpromptuInterface поддерживает Silverlight 4. Он позволяет не только статические реализации утиной печати, но и динамические, как Что ж.

person jbtule    schedule 14.03.2011