用于验证方法参数的c#属性

用于验证方法参数的c#属性,c#,attributes,C#,Attributes,我有一个windows服务,我正在向每个根据数据库验证的服务调用传递一个用户ID。现在我必须在每个方法内部调用该验证方法。我试图创建一个c#属性,可以为每个方法添加前缀,并让它为我进行验证,但我不确定如何从属性中读取methods userId参数 这就是我所拥有的: public int GetANumber(Guid userId){ ValidateUserId(userId); return 1; } 这就是我想要的: [ValidateUserId] public int Ge

我有一个windows服务,我正在向每个根据数据库验证的服务调用传递一个用户ID。现在我必须在每个方法内部调用该验证方法。我试图创建一个c#属性,可以为每个方法添加前缀,并让它为我进行验证,但我不确定如何从属性中读取methods userId参数

这就是我所拥有的:

public int GetANumber(Guid userId){

ValidateUserId(userId);

return 1;

}
这就是我想要的:

[ValidateUserId]
public int GetANumber(Guid userId){

    return 1;

    }
到目前为止,我的属性是:

[AttributeUsage(AttributeTargets.Method)]
    public sealed class ValidateUserId : Attribute
    {
        public ValidateUserId()
        {
            //need to get userId from method here and check against db
        }
    }

有什么想法吗?

这不是一个问题,属性是用来解决的。进行方法调用。属性值必须在编译时已知。您可能可以通过某种IL编织来实现。也许可以看看PostSharp。。。。除此之外,你还得做一些深刻的反思。使用该实现,您必须在每个方法的开头调用某种
PerformValidation
方法。即使这样,我也不确定如何使用实际值。但真的,不要。只需调用您的方法。方法不应该像这样被验证弄得乱七八糟。如果需要进行某种验证,请将用户放在线程静态存储(或可访问的地方)上,不要将其传递给每个方法。