PostSharp OnMethodBoundaryAspect没有触发某些asbtract方法

时间:2014-10-15 10:20:29

标签: .net postsharp

我可以覆盖一些方法,比如GetHashCode或我自己的抽象类,但是没有在SqlConnection.Open和Close上触发的方面

SqlConnection a = new SqlConnection("Password=qwsa;Persist Security Info=True;User ID=sa2;Initial Catalog=mydb;Data Source=.");
a.Open(); // not firing
var zzzz = a.GetHashCode(); //firing
a.Close(); //not firing
Class1 class1 = new Class1(); //firing
var zzzzzzz=class1.testttt(); //not firing

这是我的代码

[Serializable]
public class TestOverrideAspect : OnMethodBoundaryAspect
{
    public override void OnExit(MethodExecutionArgs args)
    {
        //DoWORK
    }
}

#if DEBUG
[assembly: PostsharpAspects.TestOverrideAspect (AttributeTargetAssemblies = "*", AttributeTargetTypes = "*", AttributeInheritance=MulticastInheritance.Multicast )]

1 个答案:

答案 0 :(得分:0)

通常,在外部装配上应用方面是不好用的标志,即使有可能并且在某些情况下是必要的。对于OnMethodBoundaryAspect和抽象方法,您希望方面实际更改所有重载(如果指定继承),则尤其如此。

您应该使用具有不同理论背景的MethodInterceptionAspect,并在您需要时更好地工作。如果你在System.Data.SqlClient.SqlConnection.Open上应用这样的方面它应该正常工作并且应该拦截抽象方法。你只是没有通常的建议,所以你需要自己实现类似的代码。

另请注意,我们在属性多播中遇到了相关的错误,最近修复了该错误,所以请检查您是否有最新版本。