我有各种单独的方法,它们都需要执行相同的功能,然后才能继续自己的实现。现在我可以在每个方法中实现这些功能,但我想知道是否有一种方法可以利用attributes
去做这个?作为一个非常简单的示例,所有网络调用都必须检查网络连接。
public void GetPage(string url)
{
if(IsNetworkConnected())
...
else
...
}
这可行,但我必须打电话给IsNetworkConnected
method 用于使用网络的每个方法并单独处理它。相反,我想这样做
[NetworkCall]
public void GetPage(string url)
{
...
}
如果网络不可用,则会调用错误方法并GetPage
被忽略,否则GetPage
被调用。
这听起来很像面向方面的编程,但我不想为几次调用实现整个框架。这更多的是一种学习练习,而不是实施练习,所以我很好奇如何最好地实施这样的事情。
您可以使用后锐利 http://www.sharpcrafters.com/,它是.NET的面向方面的框架,看起来非常容易使用 http://www.sharpcrafters.com/postsharp/documentation:
static void Main(string[] args)
{
Foo();
}
[IgnoreMethod(IsIgnored=true)]
public static void Foo()
{
Console.WriteLine("Executing Foo()...");
}
[Serializable]
public class IgnoreMethodAttribute : PostSharp.Aspects.MethodInterceptionAspect
{
public bool IsIgnored { get; set; }
public override void OnInvoke(PostSharp.Aspects.MethodInterceptionArgs args)
{
if (IsIgnored)
{
return;
}
base.OnInvoke(args);
}
}
方法级方面该功能可在free版:http://www.sharpcrafters.com/purchase/compare http://www.sharpcrafters.com/purchase/compare
运行时性能:
由于 PostSharp 是一种编译器技术,因此大部分昂贵的工作都是在构建时完成的,因此应用程序可以快速启动并快速执行。生成代码时,PostSharp 假设调用虚拟方法或获取静态字段是一项昂贵的操作。与传言相反,PostSharp 在运行时并不使用 System.Reflection。http://www.sharpcrafters.com/postsharp/performance http://www.sharpcrafters.com/postsharp/performance
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)