LinFu.DynamicProxy和Castle.DynamicProxy之间有什么区别?

Dal*_*gan 30 .net castle-dynamicproxy linfu-dynamicproxy

我正在寻找将逻辑添加到我正在处理的库中,这需要动态代理.我想从在生产环境中使用这两个库的用户那里得到一些建议.是否有一个人执行另一个,是否有任何缺点,使你必须切换到另一个,等等.基本上告诉我你的图书馆的经验.答案将帮助我决定使用哪一个.

- 编辑 -


我忘了提到我正在开发的图书馆将支持Mono,因此你可以分享关于这两个图书馆及其对Mono的支持的任何知识也会很棒.

Krz*_*mic 20

我是Castle的提交者,为动态代理做贡献,所以我可能有偏见,但我一般认为Castle的动态代理是更好的解决方案.我在这里谈论LinFu DynamicProxy v1.0,因为这是我熟悉的.LinFu.Proxy 2基于Mono.Cecil并从头开始重写.

  • 城堡涵盖了更广泛的场景.
  • Castle拥有(大量)更大的用户群,并在许多OSS和商业应用程序中得到验证
  • 城堡实际上表现更好(链接)
  • Castle具有更清晰,更易于使用的API,例如调用Castle DynamicProxy的目标方法如下所示:

invocation.Proceed();

对于LinFu来说,它看起来像这样(实际的方法/属性名称可能因我从内存中写入而有所不同)

//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
Run Code Online (Sandbox Code Playgroud)
  • Castle有一个活跃的用户组,您可以在其中快速获得问题的答案.

其他答案提到的性能问题不是DynamicProxy问题,而是微软实施BCL的错误结果(在Mono上没有这样的问题BTW).这仅在单个ModuleScope中有许多(超过200个)代理类型时才会显现.

解决方案是微不足道的 - 不要生成那么多代理类型(通常你不必)或使用许多ModuleScopes/ProxyGenerators(例如Rhino.Mocks使用这种方法)

我个人不用单声道开发,所以我没有第一手经验,但是在Mono上有使用Castle DP的库,我们没有得到任何compliaints所以我想它的工作正常.

自几个月前我的基准测试以来,没有新版本的Castle DP(新版本的目标是年底).LiFu有一个2.0版本,但我不确定它是仅仅是主干还是已发布.我不知道Spring或Unity.

  • 这显然不再是最新的,因为linfu中的堆栈跟踪错误似乎是固定的 (2认同)

Coc*_*lla 10

Linfu是一个比Castle代理生成器更轻量级的代理生成器.

在决定使用哪个时,说实话它并没有太大的区别.

根据作者的说法,Linfu将大大优于Castle生成器,但在我自己对现实世界使用的观察中,速度的差异是微不足道的.

虽然说林府的表现会超过城堡,但我不知道Castle有什么东西,所以我总是使用Linfu.

  • “轻巧”是什么意思? (2认同)