Ответ 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.