我创建了一个派生自System.ComponentModel.DataAnnotations.AuthorizationAttribute的自定义属性,并覆盖了IsAuthorized方法。
我使用new属性修饰了我的方法,但从未调用过IsAuthorized方法。任何人都可以解释原因吗?
这是我的属性声明:
[AttributeUsage(AttributeTargets.All)]
public class AuthorisationAttribute : System.ComponentModel.DataAnnotations.AuthorizationAttribute
{
private bool IsAuthorised { get; set; }
public AuthorisationAttribute(bool isAuthorised)
{
IsAuthorised = isAuthorised;
}
protected override AuthorizationResult IsAuthorized(IPrincipal principal, AuthorizationContext authorizationContext)
{
return IsAuthorised ? AuthorizationResult.Allowed : new AuthorizationResult("You are not authorised for this activity");
}
}
这是我的用法:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[Authorisation(true)]
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Pass");
}
[Authorisation(false)]
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Shouldn't see this");
}
}
提前致谢。
答案 0 :(得分:2)
非常少数例外,属性不是注入点。他们自己完全不做 。它们是只是元数据(有关类型/成员的信息)。要使它们活动,您需要调用框架来显式检查它们(通过反射),并调用任何方法。
在某些地方就是这种情况;例如,MVC广泛使用属性。但是winform事件处理程序和其他任意方法都不是这种情况。没有任何反应。
基本上,你已经完成了相当于将“不要进入”的粘性标签放在门上,而是在默认情况下没人能看到的地方(例如门的上边缘)。如果(两者)只做一些事情: