c# - 使用属性检查是否访问方法

标签 c# .net attributes aop

我有一个方法,只有在满足特定条件时才可以访问,如果不满足,则不会执行该方法。目前,这就是我编写代码的方式:

public void CanAccessDatabase()
{
   if(StaticClass.IsEligible())
   {
      return;
   }
   // do the logic
}

现在,这段代码很丑陋,因为根本就没有这个 if(StaticClass.IsEligible()) 条件与方法的关注点无关。

所以我正在考虑将 IsEligible 方法放在属性中,这样我的代码将如下所示。 如果条件不满足,则该方法直接返回,不执行下面的逻辑。

[IsEligibleCheck]
public void CanAccessDatabase()
{
   // do the logic
}

当然,资格是运行时的决定。

关于如何编写 IsEligibleCheck 逻辑的任何想法?谢谢

编辑:我知道 PostSharp 可以做到这一点,但我正在寻找开箱即用的东西,不依赖于任何第三方库。

最佳答案

Any idea on how to code up the logic for IsEligibleCheck?

这是 AOP 的完美位置。

Edit: I know PostSharp can do this, but I am looking at something that works out of box, not depending on any third-party library.

Microsoft 是否被视为第三方?如果没有,您可以查看 Unity来自他们的 Patterns & Practices team .看Interceptor Unity 中的机制。

否则,您实际上必须使用反射来滚动您自己的实现。实际上,您必须做的是将对象包装在代理中,其中代理使用反射来检查属性并适本地解释它们。如果 IsEligibleCheck 成功,则代理调用包装对象上的方法。真的,重用一个已经存在的实现会更容易。

我的建议是只使用 Unity(或其他 AOP 解决方案)。

关于c# - 使用属性检查是否访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937738/

相关文章:

Python静态方法,为什么?

reflection - 在 F# 中,如何访问函数的属性?

c# - 匹配系统的表设计

c# - 我可以将 Linq 的 Except() 与 lambda 表达式比较器一起使用吗?

c# - jqModal 取消从 Iframe 打开但显示在父窗口中的警报框

.net - 什么决定发送 ACK 之前的数据包数量?服务器上的 .NET 套接字

.net - 在 .Net 中实现 MSSCCI 提供程序

.net - 为什么首先需要 GUID 属性?

c# - 如何在与 SignalGo 套接字断开连接后自动调用登录功能

C# .net -> SQLite 错误 : Unable to open the database file