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