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

AttributeUsageMVC に固有のものではありません。属性がどこでどのように使用されるかを説明します。

ほとんどの (すべて?) 場合、コンパイラはこれらの制約を強制します。

ただし、「魔法の」ことは何も起こりません。何かを行うには、クラス/メンバーを属性で装飾する必要があります。つまり、すべての型またはメンバーに自動的に適用されるわけではありません。*

参照: 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

AttributeUsage は、属性を使用できる場所と方法を指定します。したがって、例はクラスまたはメソッドに適用できますが、エンティティごとに 1 回しか適用できません。

クラスに自動的にアタッチされることはありません。自分で明示的に行う必要があります。

AttributeUsage に関する C# プログラミング ガイドを参照してください: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.80).aspx

于 2013-02-26T08:38:00.073 に答える
0

他のすべてのタイプのアプリケーションとまったく同じことを行います (特別な MVC 動作はありません) - 特定の属性を使用できる場所を指定します。

于 2013-02-26T08:34:34.040 に答える