Я приверженец Касла, участвующий в работе Динамического прокси, поэтому я могу быть предвзятым, но в целом я считаю, что Динамический прокси Касла является гораздо лучшим решением. Я говорю здесь о LinFu DynamicProxy v1.0, потому что это то, с чем я знаком. LinFu.Proxy 2 основан на Mono.Cecil и переписан с нуля.
- Замок охватывает более широкий спектр сценариев.
- Castle имеет (намного) большую пользовательскую базу, и доказано во многих OSS и коммерческих приложениях
- Замок на самом деле работает лучше ( ссылка )
- Замок имеет более чистый, простой в использовании API
например, вызов целевого метода для 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, но я не уверен, что она только магистральная или выпущена. Я не знаю о Весне или Единстве.