PostSharp-使用AttributeExclude排除一个方法不工作
我们有一个项目,我们正在使用PostSharp启用登录.效果很好.但是,有几种在非常紧密的循环中运行的方法,其中记录的开销确实增加了很多.我试图找出将它们排除在记录代码之外的最佳方法. 根据我阅读的内容,这种方法应该起作用 AssemblyInfo.cs // turn on logging for all methods in all classes [assembly: Log(LogType.Debug)] Code.cs // exclude this specific method [Log(AttributeExclude=true)] private void SomeMethod(...) 但是,当我这样做并使用探测器运行时,我仍然看到日志代码在somemethod()上执行.我根据So和PostSharp论坛上的帖子尝试了许多不同的迭代,并且我总是得到相同的结果. 感觉这应该很简单,我只是缺少明显的东西. 解决方案 i结果发现我的so
0 2024-02-27
编程技术问答社区
使用PostSharp来拦截ADO.Net
我使用各种不同的ADO技术具有很大的代码库(即某些EF,在某些情况下直接使用Ado.net). 我想知道是否有任何方法可以在全球拦截任何ADO.NET调用中,以便我可以开始审核信息 - 执行,取得的时间,返回的时间,返回的时间等的精确SQL语句等. 主要思想是,如果我可以这样做,我不必更改我的任何现有代码,我应该能够仅拦截/包装ado.net呼叫...这是可能的吗? 解决方案 您可以在全球范围内拦截您可以访问的任何方法(即:您生成的模型和上下文).如果您需要在框架BCL中拦截方法,则不. 如果您只想从EF模型中生成SQL,则用OnMethodBoundaryAspect拦截一种所需的方法之一,您可以在OnEntry和Onexit方法中进行登录. 请记住,您只能拦截您可以访问的代码.生成的EF代码是可访问的,但会过度编写您对其进行的任何更改,因此您需要使用部分类或汇编声明应用方面.我建议后者,因为您想要全球拦截. 只是我的2美分:您可能想查看其他替代方案,
2 2024-02-27
编程技术问答社区
我如何使用简单的面向方面的概念来处理异常处理,而不使用postsharp?
我想使用AOP处理控制台应用程序中的错误例外. (不是MVC我使用属性花瓶编程来处理MVC中的错误,但这是控制台应用程序)下面我的代码:(如果发生错误,它应该丢弃错误,我的属性侧代码) ) [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public class HandleError : Attribute { public HandleError(string description) { try { this.Description = description; } catch (Exception) { throw; } } public string Descriptio
0 2024-02-27
编程技术问答社区
Postsharp编译时对接口方法的验证
我有一个包含服务合同的程序集(汇编名称为Contracts).我想使用属性和 postSharp 对这些方法实施授权. 授权属性看起来像这样: public class Auth : System.Attribute { public Auth(String permission){...} } 我希望我的服务合同看起来像这样: namespace Contracts { public interface IService { [Auth("CanCallFoo")] void Foo(); } } 我想在编译时检查Contracts汇编中的所有方法都具有Auth属性. 为了做到这一点,我创建了以下方面: [Serializable] [MulticastAttributeUsage(MulticastTargets.Interface & MulticastTargets.Method)] p
0 2024-02-27
编程技术问答社区
是否可以通过PostSharp在构建时访问引入的/织补的接口和成员?
我正在设计一个场景,其中两个后期方面彼此合作.我有一个方面(FirstAspect在下面的代码中),该方面旨在引入接口,然后另一个方面(SecondAspect在下面的代码中)应该与第一个方面引入的接口一起使用. 但是,似乎并没有第一个方面引入的界面可用于第二方面. 这是我目前正在使用的代码: public class Tests { [Fact] public void Verify() { // Not really all that significant as the current code does not compile correctly: var sut = new MyClass(); Assert.True( sut is IInterface ); } public interface IInterface { void HelloWor
0 2024-02-27
编程技术问答社区
自动属性的INotifyPropertyChanged-Feature功能
我有许多模型类,它们实现了InotifyPropertychanged-Interface,以便在值更改时更新UI. 可悲的是,必须完全编写属性以支持此功能.我已经通过使用" setPropertyvalue" method()在基本中降低了代码. private string _title; public string Title { get { return title; } set { SetPropertyValue("Title", ref _title, value ); } } 但是,在一个文件中写了20个属性,与自动实施的属性不同,在短时间内理解文件的内容并不是那么简单. 我想要的是这样写我的财产: [NotifyChanged] public string Title { get; set; } 我已经检查了 postSharp ,但在免费版本中只有10个类(其中包括一个(它是一个)爱好项目,所以我不想付太多钱).
0 2024-02-27
编程技术问答社区
使用PostSharp和TraceAttribute来记录HttpContext'的SessionID
我在每个类上使用TraceAttribute的PostSharp,以写入日志文件.一个新的要求是能够使用SessionID. sharp似乎无法通过这种方式工作.我尝试了两种对我来说很有意义的方法. 尝试#1 我在要传递并使用OnEntry,OnExit和OnException方法的TraceAttribute构造函数中添加了一个字符串参数. private readonly string _sessionID; public TraceAttribute(string sessionID) { _sessionID = sessionID; logger = new Logger(); } public override void OnExit(MethodExecutionArgs args) { logger.LogMethodExit(string.Format("Session {0} Exiting {1}.{2}", _ses
0 2024-02-27
编程技术问答社区
预处理C#-检测方法
我需要能够将许多C#文件作为项目的预构建步骤,检测方法的开始,然后在任何现有代码之前插入方法开始时生成的代码.但是,我在检测方法的打开时遇到问题.我最初尝试了一个正则表达式匹配,但最终得到了太多的误报. 我会使用反射,但是MethodInfo类并未引用原始源中的点. 编辑:我在这里真正要做的是支持有关方法的前条件,该方法由该方法上的属性确定.我最初的想法是我可以寻找方法的开始,然后插入生成的代码以处理前条件. 有更好的方法吗?如果需要,我愿意创建一个视觉工作室. 这是一个.NET 2.0项目. 欢呼 解决方案 postSharp或 mono.cecil href =" http://www.mono-project.com/cecil%3afaq" rel =" nofollow noreferrer">清洁 而无需撰写C#Parser,这不太可能是核心业务业务为你... 没有对后塑的任何结果,但会猜测它比单声道更合适地实施前提条件或AOP.另
2 2024-02-27
编程技术问答社区
PostSharp方面的属性设置器,调用通用方法
我们有一个基本对象,用于某些类似于MVC的系统,其中的每个属性都是这样写的: public String FirstName { get { return GetProperty("FirstName", ref _FirstName); } set { SetProperty("FirstName", ref _FirstName, value); } } 这既是用于调试目的,也是出于通知和验证目的.我们使用getter提醒我们明确标记将要读取内容的代码(为了使基类能够只有在这些属性更改时才能调用)并弄错了它,并且我们使用setter用于财产更改通知,肮脏的范围处理,验证等 为简单起见,让我们假设这些方法的实现如下: protected T GetProperty(String propertyName, ref T backingField) { return backingField; }
0 2024-02-27
编程技术问答社区
Postsharp方面可以用于网站项目吗?
我正在尝试在VS2012的网站项目中使用后展览.当我设置Web应用程序项目时,它似乎可以正常工作,但是当我将方面属性应用于网站项目中的一个方法时,它会编译并运行正常,但是我的OnMethodBoundaryAspect永远不会受到打击.我尝试设置断点并从方面方法记录. PostSharp支持网站项目吗?如果是这样,我想念什么? 请不要评论为什么我要使用网站而不是网络应用程序.不幸的是,这是一个要求(不要问). 这是我的方面代码(全部在vb.net中),但就像我说的那样,它在Web应用程序项目上正常工作: Imports PostSharp.Aspects Namespace TestAopLib Public Class AopTester Inherits OnMethodBoundaryAspect Public Overrides Sub OnEntry(args As MethodExecutionArg
0 2024-02-27
编程技术问答社区
运行单元测试时如何禁用PostSharp?
我希望我的nunit测试不应用任何我的后期方面,以便我可以孤立地测试我的方法.可以在测试固定设置中以某种方式完成此操作,还是只能在每个项目级别上完成? 解决方案 您可以在测试构建上设置" SkippostSharp"标志,以便首先将其编译到您的二进制文件中. 其他解决方案 您可以在您的方面上有一个静态标志,以打开/关闭它并在您的方面实现中检查标志状态. 然后在您的单元测试设置中,只需关闭静态标志. 例如. public static bool On = true; ... public override void OnInvoke(MethodInterceptionArgs args) { if (!CacheAttribute.On) { args.ReturnValue = args.Invoke(args.Arguments); } 其他
0 2024-02-27
编程技术问答社区
面向方面的编程。你用PostSharp做什么?
我想询问AOP Framework PostSharp的用户,您具体使用什么框架? 另外,我知道它的用途对构建时间产生了很大的负面影响,但是运行时性能如何?有很多打击吗? 谢谢, s 解决方案 我用它从InotifyPropertychanged方法中删除属性名称的气味,并且它没有严重影响运行时性能. 其他解决方案 我使用编译时间编织来为某些用某个属性装饰的方法添加额外的功能. 喜欢其他解决方案 简而言之,它使开发速度更快,代码更加可维护和易于理解.当您愿意付出努力时,不必出现表演.
0 2024-02-27
编程技术问答社区
Postsharp新手-为什么args.Instance是空的?
PostSharp的新手---我现在正在尝试Nuget版本,并且我正在尝试理解Agrs.intance值的权威性方法中的wny.我正在尝试实现取决于对象值的作者,例如存档的客户不会提高信用额度.我正在在特定规则的其他类中实施规则. public class Program { static void Main(string[] args) { var c = new Customer(); c.RaiseCreditLimit(100000); c.Error(00); } } public class Customer { [AuthorizeActivity] public void RaiseCreditLimit(int newValue) { } [AuthorizeActivity] public void Error(int newValue)
2 2024-02-27
编程技术问答社区
如何用PostSharp实现Lazy loading?
我想用postsharp上的属性实现懒惰加载. 使它简短,而不是写作 SomeType _field = null; private SomeType Field { get { if (_field == null) { _field = LongOperation(); } return _field; } } 我想写 [LazyLoadAspect] private object Field { get { return LongOperation(); } } 因此,我确定我需要在类中发射一些代码以生成衬板字段以及在Getter方法中以实现测试. 随着PostSharp的使用,我正在考虑覆盖CompileTimeInitialize,但是我缺少了解编译代码的知识. 编辑: 这个问题可以扩展到任
0 2024-02-27
编程技术问答社区
基于类的属性实现接口,无需反射
此页面在PostSharp网站上有以下预告片: 您将遇到的常见情况之一是需要在大量类上实现特定的接口.这可能是INotifyPropertyChanged,IDispose,IEquatable或您创建的一些自定义接口. 我想根据所应用的类的属性编写一个自定义的方面,该方面实现IEquatable的一般版本(最好是在编译时,而不是在运行时使用反射).只要能够将属性添加到一个简单的类,而不是每次都必须实现自定义方法,这将是一件好事.那可能吗?我希望如此,因为它是在此简介中专门调用的,但是我无法跟踪任何示例代码. 我已经看过是否有一种方法可以根据应用于应用于的类型的属性来构建实现IEquatable的自定义属性(即,如果它们的所有属性都相等,则将两个实例相等)? )? 我已经找到了使用T4模板的解决方案,但想知道是否可以使用相同的方法来实现sharp. 编辑: 要清楚,我希望能够写下这样的东西: [AutoEquatable] public class
0 2024-02-27
编程技术问答社区
Spring.Net可以作为PostSharp的功能吗?
几个月前,我发现了后期,一段时间很好. 但随后法律回到答案,说他们不喜欢旧版本的许可.然后,该部门告诉我,2.0的价格值得不可接受(对于我们需要的座位数)...我非常敬重,但并没有沮丧.我认为不是唯一的框架. 我一直在寻找替代品,但其中大多数要么死了,要么死了(尤其是在文档部门),供学术用途,或者以上所有(我正在查看您的expact.net) 然后我发现了spring.net,一段时间很好. 我一直在阅读文档,它继续描绘了AOP涅rv的晚餐图片.我不再锁定要标记要进行代码截距的属性,但是可以在XML中配置,并且不需要重新编译.太好了. 然后,我看着样本并在每个用法方案中看到了以下内容: // Create AOP proxy using Spring.NET IoC container. IApplicationContext ctx = ContextRegistry.GetContext(); ICommand command = (IComman
2 2024-02-27
编程技术问答社区
使用PostSharp添加一个OnException属性
我正在冒险进入一些AOP,似乎有.NET PostSharp是必经之路. 发生异常时,我想对DB进行一些简单的记录.但是,我发现很难找到除基础以外的后期使用后的任何真正的扎实示例.我尝试了以下内容: [Serializable] public sealed class LogExceptionAttribute : ExceptionHandlerAspect { public override void OnException(MethodExecutionEventArgs eventArgs) { //do some logging here } } 然后将[LogException]属性附加到方法 但是我得到了一个编译错误: Error 7 The type "CoDrivrBeta1.Classes.LogExceptionAttribute" or one of its ancestor should
0 2024-02-27
编程技术问答社区
为什么编译后代码注入比编译前代码注入更好?
所以我们都知道C#没有类似C的宏观处理器(并且有一个很好的线程,为什么在这里).但是,既然AOP正在受到关注,似乎我们开始与我们过去与预处理器一起做的后处理器做事(请记住,我只用我是C#中属性的忠实拥护者,但是如果有充分的理由被遗漏了(作为前MFC用户,我仍然质疑,但仍然接受),为什么兼容后代码注入更好的主意比兼容码注射? 解决方案 我在5年前设计后兼容时选择兼容后的原因是: 语言不可知论. MSIL具有与高级语言相比的稳定规格(每隔第二年都有非平凡的更新). 大多数时候,MSIL是处理方面时所需的抽象水平.您不需要知道所有等效的构造(想想f'fast f'faster'和" try-finally"). 在2008年之前,没有人成功制作出一个不错的C#编译器.单声道遇到的困难也足够令人印象深刻,即使他们现在已经赶上了. 处理二进制似乎比处理源代码要快得多. 处理二进制组件可以执行它 - 正在处理的组件可以自行改变.在PostSharp Laos首次发行之前,这是
0 2024-02-27
编程技术问答社区
PostSharp 如何在运行时知道某个方面是否被应用于方法?
我正在实施后期库库,无法找到解决以下问题的解决方案. 假设我们有一个方面将用于某些方法,并且不会应用于其他方法.我需要一些在运行时可以使用的机制,以了解是否将方面应用于方法.具体来说,在运行时确定某些方面是否应用于System.Reflection.MethodBase? 给出的特定方法的推荐方法是什么. 我脑海中出现的第一个解决方案是使后期标记每种通过自定义的方法修改的方法,并在运行时使用methodBase.CustomAttributes.这是解决问题的正确解决方案吗?也许在PostSharp中已经有一个现成的或更优雅的解决方案. 另外,请考虑首选是一种解决方案,不需要付费后的签名许可证,因为免费社区版本足以满足我当前的项目.无论如何,讨论基于付费的后Sharp功能的解决方案将非常有趣. 解决方案 当您添加方法级方面(例如 onexceptionAspect"> onexceptionaspect )汇编级别,postSharp 多播 此属性属于该类/汇编中
0 2024-02-27
编程技术问答社区
如何根据条件在PostSharp方面的OnEntry方法中退出一个方法
我希望根据以下条件退出方法调用的方面: [AttributeUsage(AttributeTargets.Method)] public class IgnoreIfInactiveAttribute : OnMethodBoundaryAspect { public override void OnEntry(MethodExecutionEventArgs eventArgs) { if (condition) { **// How can I make the method return here?** } } } 任何帮助. 解决方案 好吧,我自己想了.这里的解决方案是为了受益: [AttributeUsage(AttributeTargets.Method)]
0 2024-02-27
编程技术问答社区