【发布时间】:2009-08-07 01:22:33
【问题描述】:
.NET 中的Conditional Attribute 允许您在编译时禁用方法的调用。我正在寻找基本相同的东西,但在运行时。我觉得这样的东西应该存在于 AOP 框架中,但我不知道它的名称,所以我无法确定它是否受支持。
作为一个例子,我想做这样的事情
[RuntimeConditional("Bob")]
public static void M() {
Console.WriteLine("Executed Class1.M");
}
//.....
//Determines if a method should execute.
public bool RuntimeConditional(string[] conditions) {
bool shouldExecute = conditions[0] == "Bob";
return shouldExecute;
}
因此,无论何时在代码中调用 M 方法,它都会首先调用 RuntimeConditional 并传入 Bob 以确定是否M 应该被执行。
【问题讨论】:
-
在你的例子中,什么样的代码会让 M 执行?什么样的代码会使其无法执行,而您希望发生什么?
-
RuntimeConditional 方法将控制它是否会执行。现在 Bob 是硬编码的,所以它会一直执行。 RuntimeConditional Method 中的字符串 Bob 将被替换为从配置文件/数据库字段中提取的一些代码,以查看是否应该调用该方法。
-
您可以简单地在 Trace 属性的 OnEntry 覆盖中抛出异常。不是你想要的,但它会阻止你的方法执行。
-
我想实现与常规条件属性相同的行为。抛出异常会破坏这种行为。