2013-02-26 21 views
7

Trong mã mẫu của tôi, tôi có như sau:Gì AttributeUsage làm trong MVC4

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) 

Ai đó có thể giải thích cho tôi cách làm việc này? Điều này có tự động được gắn vào mọi phương thức lớp hay chỉ các lớp điều khiển? Tôi đang sử dụng cả MVC và cũng là api web. Nó cũng sẽ đính kèm với các phương pháp api web?

Trả lời

8

AttributeUsage không dành riêng cho MVC. Nó mô tả ở đâu và làm thế nào một thuộc tính có thể được sử dụng.

Trong hầu hết các trường hợp (tất cả?), Trình biên dịch sẽ thực thi các ràng buộc này.

Tuy nhiên, không có gì "huyền diệu" xảy ra; bạn vẫn cần phải trang trí lớp/thành viên với thuộc tính cho nó làm bất cứ điều gì. Nói cách khác, nó không tự động được áp dụng cho tất cả các loại hoặc các thành viên *

Xem thêm:. http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.110).aspx

* Thuộc tính Inherited không cung cấp một số lượng rất hạn chế về tự động hóa. Xem How does inheritance work for Attributes?.

+0

tôi có một nghi ngờ nhỏ, trong câu hỏi trên, chúng ta có một lớp niêm phong và AttributeUsage đã thừa kế tài sản = true. Làm thế nào có thể làm việc này, khi niêm phong ngăn chặn các lớp học thừa kế, xin vui lòng giải thích .. cảm ơn bạn –

+1

@LijinJohn - bản thân thuộc tính được niêm phong, nhưng thuộc tính 'Inherited' mô tả cách thức thuộc tính hoạt động khi áp dụng cho * các lớp * khác. Những lớp học khác có thể không được niêm phong. –

0

Nó thực hiện tương tự như trong tất cả các loại ứng dụng khác (không có hành vi MVC đặc biệt) - chỉ định nơi sử dụng thuộc tính cụ thể .

1

Xác định cách sử dụng lớp thuộc tính tùy chỉnh. AttributeUsage là một thuộc tính có thể được áp dụng cho các định nghĩa thuộc tính tùy chỉnh để kiểm soát cách áp dụng thuộc tính mới.

Vì vậy, về cơ bản nó cung cấp cho trình biên dịch một số thông tin bổ sung về lớp thuộc tính mà bạn sẽ thực hiện.

Bạn có một vài ví dụ tuyệt vời tại: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.100).aspx

0

AttributeUsage mệnh lệnh ở đâu và như thế nào thuộc tính có thể được sử dụng. Ví dụ của bạn có thể được áp dụng cho một lớp hoặc một phương thức, nhưng nó chỉ có thể được áp dụng một lần cho mỗi thực thể.

Nó sẽ không được tự động đính kèm vào bất kỳ lớp nào. Bạn sẽ phải tự mình làm điều đó một cách rõ ràng.

Xem hướng dẫn lập trình C# trên AttributeUsage: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.80).aspx