Soy un committer de Castle, contribuyendo al Dynamic Proxy, por lo que puedo ser parcial, pero en general creo que el proxy dinámico de Castle es una solución mucho mejor. Estoy hablando aquí de LinFu DynamicProxy v1.0 porque eso es con lo que estoy familiarizado. LinFu.Proxy 2 está basado en Mono.Cecil y se reescribe desde el principio.
- Castle cubre una amplia gama de escenarios.
- Castillo tiene (mucho) más grande base de usuarios, y se ha demostrado en muchas aplicaciones comerciales OSS y
- Castillo es en realidad un mejor desempeño (link)
- Castillo tiene más limpio, más fácil de usar API por ejemplo, método de destino invocando a Castillo DynamicProxy se ve así:
invocation.Proceed();
para Linfu, parece que esto (nombre real método/propiedad puede variar a medida que lo estoy escribiendo desde la memoria)
//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
- Castillo tiene un grupo de usuarios activos donde se puede obtener respuestas rápidas a las preguntas.
El problema de rendimiento, mencionado por la otra respuesta no es un problema de DynamicProxy, pero es el resultado de un error en la implementación de BCL por parte de Microsoft (en Mono no existe dicho problema). Esto solo se manifiesta cuando tiene muchos (más de 200) tipos de proxy en un único ModuleScope.
La solución es trivial: no genere tantos tipos de proxy (generalmente no será necesario) o use muchos ModuleScopes/ProxyGenerators (por ejemplo, Rhino.Mocks usa este enfoque)
Personalmente no desarrollo en Mono, así que no tengo experiencia de primera mano, sin embargo, hay bibliotecas que usan Castle DP en Mono, y no obtuvimos ninguna compliant así que supongo que funciona solo multa.
Desde mi punto de referencia hace unos meses, no ha habido una nueva versión de Castle DP (la nueva versión está destinada a finales de año). LiFu tiene una versión 2.0, pero no estoy seguro de si es solo troncal o está liberado. No sé sobre Primavera o Unidad.
@Krzysztof - Gracias por el enlace en las pruebas de rendimiento que ha ejecutado. Veo que las pruebas fueron hace aproximadamente 6 meses. ¿Has intentado ejecutar las pruebas de nuevo con las últimas versiones de cada marco? No estoy seguro de si ha habido nuevas versiones desde entonces. Además, olvidé una cosa en mi pregunta y la edité. ¿Podría editar su respuesta para incluir las pruebas de experiencia bajo Mono? –
He realizado pruebas de Dynamic Proxy (trunk) en comparación con la versión 2.1. Si bien los tiempos de intercepción no han cambiado (y funciona ** muy ** rápido), la generación del tipo de proxy ahora es varias veces más rápida –
@ KrzysztofKoźmic, ¿Cuál sería su recomendación actual entre Castle y Lin Fu? – smartcaveman