在我的示例代码中,我有以下内容:
namespace WebUx.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
有人可以向我解释一下这是如何运作的吗?这会自动附加到每个类方法还是仅附加到控制器类?我正在使用MVC和web api。它还会附加到web api方法吗?
答案 0 :(得分:9)
AttributeUsage
并非特定于MVC。它描述了属性的使用位置和方式。
在大多数(所有?)情况下,编译器将强制执行这些约束。
然而,没有任何“神奇”发生;你仍然需要使用属性来装饰类/成员,因为它可以做任何事情。换句话说,它不会自动应用于所有类型或成员。*
另请参阅:http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.110).aspx
* Inherited
属性确实提供了非常有限的自动化。见How does inheritance work for Attributes?。
答案 1 :(得分:1)
确定如何使用自定义属性类。 AttributeUsage是一个属性,可以应用于自定义属性定义,以控制如何应用新属性。
因此它基本上为编译器提供了一些关于你将要实现的属性类的额外信息。
你有几个很好的例子: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.100).aspx
答案 2 :(得分:0)
它与所有其他类型的应用程序完全相同(没有特殊的MVC行为) - 指定可以使用的特定属性。
答案 3 :(得分:0)
AttributeUsage指示属性的使用位置和方式。因此,您的示例可以应用于类或方法,但每个实体只能应用一次。
它不会自动附加到任何类。你必须自己明确地做到这一点。
请参阅AttributeUsage上的C#编程指南: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.80).aspx