这是更好的方面的能力,容易使用、文档的样品,社区的支持,与一体化,已知实现的,长期的可行性和建造速度对实现一个自定义AOP框架?

我将开始与我所知(我已经只有试图PostSharp到迄今为止):

  • Microsoft共同编译器 Instrastruture(CCI):我读过 用于FxCop,ILMerge,规范#和 代码的合同。这似乎是非常低的水平 因为它甚至不照顾的修正偏移的分行代码是博尔肯当IL是修改与它.
  • PostSharp 是5岁,有许多 能力AOP(例如摘要 有些事情你会需要有来 做手动用IL距),来源 代码,开发/支持 通过唯一的一个家伙,但他的计划 这是一个业务,已 文档,但可能会更好, 建立需要大约两倍长,非常 小样本关于如何以注射IL 和2.0版本将很快被释放 这将是大大的改善。
  • 单的塞西尔:书面通过一个家伙,一部分 单套房,并有一个 插件反射称为Reflexil 使用单塞西尔.
有帮助吗?

解决方案

两Microsoft。CCI和单。塞西尔是低水平,并不验证生产组件。它需要许多时间找到原因的问题,如果有任何错误所产生的代码或大会的结构。
我建议使用PostSharp如果它的功能是足够的,你的任务。
否则...单。Cecil有更好、更容易理解和容易使用的对象模型。然而,我有一个丑陋的错误时,使用它在我的节目(基准错误的方法是存在的组件;我想有些错误的处理元数据标记)
Microsoft。CCI有一个丑陋的,完全是过度的设计对象模型的同时缺乏许多简单的功能;然而,这是更成熟的比单。塞西尔最后,我放弃了单。塞西尔,并使用微软。CCI于我的节目。

其他提示

与大多数的框架已经摆在那里,我会建议你,关于执行自己的AOP框架: 不要这么做.有几个已经在那里,包括(即将)商业支持PostSharp, CThru, 一AOP框架由 Typemock.

但无论如何,我发现单。塞西尔非常容易使用。它摘要走需要处理 Reflection.Emit 很好,它具有支持的单一的社会。

我建议你看看 林夫 -它是一个开放源库,他们中的一个是AOP框架上实现的单。塞西尔有一个很好的文章 林夫AOP 上演示.

据我所知,林夫是建立在单。塞西尔

我要说的是,PostSharp.核心具有更高级别的功能比其他框架,所以很少,难以用于较大的工作。你可以在较低的水平,但不是在二级(通过设计)。你可以做一个组件的兼并/收缩,使用PostSharp,但事实上,它汇编了回使用ILASM会设置一些限制(例如,即使内部各成员应该命名)。在其他方面,具有ILASM作为后端,使它更容易到发展的顶部PostSharp,由于ILASM验证的许多规则和可以很容易地读所产生的集码。PostSharp甚至让你把意见变成集,以帮助调试代码生成。

另一点:如果你想要做一个自定义的方面(例如,开发一个数据库引擎和希望提供一个持久性方面),你需要远远超过只是一个集重写。你需要一个奥基础设施,将做很多的工作。当你发展一个自定义方面,我要说的1%的工作是特定于定义方面,39%的是一方面基础设施,而60%是集重写东西。我常常能够程序的一个非常具体的方面在几个小时的基础上PostSharp.

因此,回到你的问题,以及当然我自己的biais,我会说:如果你想要写一个混淆,兼并/收缩等,而不是去单。Cecil或Microsoft。CCI于唯一的原因,他们的许可证,如果更加友好,比PostSharp的一个。但如果只是想要开发一个自定义的方面,使用PostSharp会让你保存 星期, 和你会感到惊讶,由商业条件,我们可以提议如果你的计划来重新分配PostSharp.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top