9

在我的示例代码中,我有以下内容:

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 方法吗?

4

4 回答 4

10

AttributeUsage不特定于 MVC。它描述了可以在何处以及如何使用属性。

在大多数(所有?)情况下,编译器将强制执行这些约束。

然而,没有什么“神奇”的事情发生。你仍然需要用属性来装饰类/成员,因为它可以做任何事情。换句话说,它不会自动应用于所有类型或成员。*

另请参阅:http: //msdn.microsoft.com/en-us/library/tw5zxet9 (v=vs.110).aspx

*Inherited属性确实提供了非常有限的自动化。请参阅继承如何为属性工作?.

于 2013-02-26T08:33:33.480 回答
1

确定如何使用自定义属性类。AttributeUsage 是一种属性,可应用于自定义属性定义以控制如何应用新属性。

所以它基本上为编译器提供了一些关于你将要实现的属性类的额外信息。

你有几个很好的例子:http: //msdn.microsoft.com/en-us/library/tw5zxet9 (v=vs.100).aspx

于 2013-02-26T08:34:37.273 回答
0

它与所有其他类型的应用程序完全相同(没有特殊的 MVC 行为) - 指定可以使用特定属性的位置。

于 2013-02-26T08:34:34.040 回答
0

AttributeUsage 规定了可以在何处以及如何使用该属性。因此,您的示例可以应用于类或方法,但每个实体只能应用一次。

它不会自动附加到任何类。您必须自己明确地这样做。

请参阅有关 AttributeUsage 的 C# 编程指南:http: //msdn.microsoft.com/en-us/library/tw5zxet9 (v=vs.80).aspx

于 2013-02-26T08:38:00.073 回答