问题标签 [postsharp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - PostSharp和调试问题?
我做了一个很简单的方面,调试的时候发现了一个问题(见代码)。我在方法出口上设置了一个断点,它实际上在“入口”方法内部。PostSharp 1.5,Visual Studio 2008 SP1
这是一个已知的错误,是否有任何解决方法?
c# - PostSharp:没有调用 OnMethodBoundaryAspect
我正在使用 PostSharp 将 CompoundAspect 应用于 ActiveRecord 类(来自 CastleProject)。代码如下所示:
一切正常,除了 CommitOnSaveSubAspect 是 OnMethodBoundaryAspect。调用 Save 方法时永远不会调用 OnSuccess 方法。我已经尝试将代码移动到 OnEntry 和 OnExit 但这里的情况相同。
CommitOnSaveSubAspect 类如下所示:
我是否以错误的方式应用方面?
c# - 生成自定义编译时警告 C#
我正在使用 VS2008,并希望根据属性上的自定义属性(如果可能的话)创建编译时警告/错误。
目前我感兴趣的有两个案例:
MyClass 必须实现接口的地方。目前我在属性的构造函数中断言这个,但是由于堆栈跟踪的性质,这并不容易追踪:
我感兴趣的第二种情况是我在属性中定义了一个类型,如果该类型实现了一个接口,那么如果另一个属性不存在,则应该显示一个警告。
IE if (MyClass.Implements(SomeInterface) && !Exists(SomeAttibute)) { 生成警告}
谢谢!
.net - 向抽象方法添加方面?
PostSharp 给出了这个错误:
PostSharp:无法在抽象或外部方法“...”上应用带有目标站点编织的 OnMethodInvocation 方面(...)。考虑从该方法中排除方面或使用调用站点编织。
建议的呼叫站点编织对我来说不是一个合适的解决方案。有没有办法为抽象方法添加前/后处理?
aop - 面向方面的编程:你用 PostSharp 做什么?
我想问一下AOP框架Postsharp的用户,你使用这个框架具体是为了什么?
另外,我知道它的使用对构建时间有很大的负面影响,但是运行时性能呢?有很大的打击吗?
谢谢,
小号
postsharp - 为什么要使用后编译器?
我正在努力理解为什么需要像PostSharp这样的后编译器?
我的理解是它只是在原始代码中插入代码,那么为什么开发人员不自己编写代码呢?
我希望有人会说它更容易编写,因为您可以在方法上使用属性,然后不会将它们弄乱样板代码,但这可以使用 DI 或反射和一点预谋来完成,而无需后编译器。我知道,既然我已经说过反射,那么性能大象现在将进入 - 但我不关心这里的相对性能,因为大多数场景的绝对性能是微不足道的(亚毫秒到毫秒)。
c# - 如何将管道代码注入/生成用属性装饰的方法?
我正在阅读一些关于缓存和记忆化以及如何使用委托和泛型轻松实现它的文章。语法非常简单,实现起来也出奇地容易,但我只是觉得由于重复性,应该可以基于属性生成代码,而不必一遍又一遍地编写相同的管道代码。
假设我们从默认示例开始:
然后记住这个:
我想,一旦找到与 Memoize 扩展方法之一匹配的标记方法,只制作一个吐出此代码的代码生成器不是更简单。因此,我可以添加一个属性,而不是编写这个管道代码:
老实说,我知道这看起来更像是应该由预处理器转换而不是实际代码生成的编译器糖,但我的问题是:
- 您认为在 ac# 源文件中查找具有给定属性的方法、解析参数类型和返回类型并生成与此指纹匹配的委托的最佳方法是什么
- 在不实际覆盖我的代码的情况下,将其集成到构建过程中的最佳方法是什么。在将源文件传递给编译器之前,是否可以对源文件进行一些预处理?
感谢您的任何想法。
更新:
我已经按照 Shay 的建议研究了 Postsharp 库,它似乎非常适合处理事务管理、跟踪或安全等非时间关键型应用程序的工作。
然而,当在时间紧迫的上下文中使用它时,它被证明比委托慢很多。每次实现对 Fibonacci 示例进行 100 万次迭代会导致运行时间降低 80 倍。(每次调用 0.012ms postsharp vs 0.00015ms delegate)
但老实说,在我打算使用它的上下文中,结果是完全可以接受的。感谢您的回复!
更新2:
显然 Postsharp 的作者正在努力开发2.0 版本,其中包括在生成的代码和编译时间方面的性能改进。
c# - PostSharp:使用 OnMethodInvocationAspect 时删除自定义属性
我有这样的一些方面:
现在我正在上课,我将我的属性添加到它:
一切正常。然而现在我想使用反射来获得我的偏移量;当我做
它什么也不返回。如何访问我的原始偏移值(我的属性上的属性)?
architecture - 通过 AOP 或其他自动化方式重构令人讨厌的遗留系统?
我最近一直在玩 PostSharp,它让我想起了几年前我遇到的一个问题:客户的开发人员已经制作了一个 Web 应用程序,但他们没有太多考虑如何管理状态信息 - 存储它(不要问我为什么)静态地在 IIS 中的 Application 实例上。毋庸置疑,该系统无法扩展,并且存在严重缺陷和不稳定。但这是一个庞大且非常复杂的系统,因此重新开发它的成本令人望而却步。我当时的简介是尝试重构代码库以在组件之间施加适当的解耦。
当时我尝试使用某种抽象机制来拦截对静态资源的所有调用,并将它们重定向到可以正确管理状态数据的组件。问题是大约有 1000 个复杂的引用需要重定向(我没有太多时间去做)手动编码(即使使用 R#)被证明太耗时了——我们废弃了代码库并正确地重写它。重写花了一年多的时间。
我现在想知道的是 - 如果我可以访问程序集重写器和/或面向方面的编程系统(例如 PostSharp),我是否可以轻松地自动化查找直接引用并将它们转换为可以重定向的接口引用的重构过程由工厂自动供应。
有没有人使用 PostSharp 或类似系统来修复病态遗留系统?这些项目有多成功?事后你发现付出的努力是值得的吗?你会再做吗?
更新:有关更多讨论,请参阅此博客文章。
c# - PostSharp 和 Castle 动态代理有什么区别?
只是想知道这些库之间的主要区别是什么,它们在特性和功能上有何不同。
希望获得比谷歌查询更多的信息......