我可以覆盖一些方法,比如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 )]
答案 0 :(得分:0)
通常,在外部装配上应用方面是不好用的标志,即使有可能并且在某些情况下是必要的。对于OnMethodBoundaryAspect
和抽象方法,您希望方面实际更改所有重载(如果指定继承),则尤其如此。
您应该使用具有不同理论背景的MethodInterceptionAspect
,并在您需要时更好地工作。如果你在System.Data.SqlClient.SqlConnection.Open
上应用这样的方面它应该正常工作并且应该拦截抽象方法。你只是没有通常的建议,所以你需要自己实现类似的代码。
另请注意,我们在属性多播中遇到了相关的错误,最近修复了该错误,所以请检查您是否有最新版本。