Подтвердить что ты не робот

Каковы различия между LinFu.DynamicProxy и Castle.DynamicProxy?

Я рассматриваю добавление логики в библиотеку, над которой я работаю, для чего потребуется динамический прокси. Я хотел бы получить совет от пользователя, который использовал эти две библиотеки в рабочей среде. Выполняет ли один из них другой, есть ли недостаток, который заставил вас переключиться на другой и т.д. В основном расскажите мне о своих опытах с библиотекой. Ответы помогут мне решить, какой из них использовать.

- Изменить -


Я забыл упомянуть, что библиотека, которую я разрабатываю, будет поддерживать Mono, поэтому любые знания, которые вы можете поделиться об этих двух библиотеках и их поддержка Mono, также будут хороши.

4b9b3361

Ответ 1

Я участвую в Castle, внося свой вклад в Dynamic Proxy, поэтому я могу быть предвзятым, но, как мне кажется, Castle Dynamic proxy намного лучше. Я говорю здесь о LinFu DynamicProxy v1.0, потому что это то, с чем я знаком. LinFu.Proxy 2 основан на Mono.Cecil и переписан с нуля.

  • Замок охватывает более широкий спектр сценариев.
  • Замок имеет (большую) большую базу пользователей и доказан во многих OSS и коммерческих приложениях
  • Замок действительно лучше работает (ссылка)
  • Замок имеет более чистый, простой в использовании API например, вызов метода target в Castle DynamicProxy выглядит следующим образом:

invocation.Proceed();

для LinFu, он выглядит так (фактическое имя метода/свойства может меняться, поскольку я пишу его из памяти)

//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
  • Замок имеет активную группу пользователей, где вы можете быстро получить ответы на свои вопросы.

Проблема производительности, упомянутая другим ответом, не является проблемой DynamicProxy, но является результатом ошибки в реализации Microsoft BCL (в Mono нет такой проблемы BTW). Это проявляется только тогда, когда у вас много (более 200+) прокси-типов в одном модуле ModuleScope.

Решение тривиально - не создавайте много типов прокси (как правило, вам не обязательно) или используйте много модулей ModuleScopes/ProxyGenerators (например, Rhino.Mocks использует этот подход)

Лично я не разрабатываю Mono, поэтому у меня нет опыта на собственном опыте, однако есть библиотеки, использующие Castle DP на Mono, и у нас не было никаких проблем, поэтому я думаю, что это работает нормально.

Со времени моего теста несколько месяцев назад не было новой версии Castle DP (новая версия нацелена на конец года). У LiFu есть версия 2.0, но я не уверен, что это только багажник или выпущен. Я не знаю о Spring или Unity.

Ответ 2

Linfu - более легкий генератор прокси, чем генератор прокси-сервера Castle.

При принятии решения о том, что использовать, если честно, это не имеет большого значения.

По словам автора, Linfu значительно превзойдет генератор замка, но в моих собственных наблюдениях за использованием в реальном мире разница в скорости незначительна.

Сказав, что Линьфу превзойдет Замок, и я ничего не знаю о чем-то, что у замка над ним, и поэтому я всегда использую Linfu.