2009-07-10 41 views
5

Tôi có một bộ điều khiển ASP.NET MVC như thế nàyLoại bỏ một thuộc tính kế thừa trong .net

[Authorize] 
public class ObjectController : Controller 
{ 
    public ObjectController(IDataService dataService) 
    { 
     DataService = dataService; 
    } 
    public IDataService DataService { get;set;} 
} 

Thuộc tính Authorize được định nghĩa là "Kế thừa = true" trong khuôn khổ. Vì vậy, khi tôi thực hiện bộ điều khiển tiếp theo:

public class DemoObjectController : ObjectController 
{ 
    public DemoObjectController(IDataService dataService) 
     : base (dataService) 
    { 
     DataService = new DemoDataService(DataService); 
    } 
} 

Thuộc tính ủy quyền, nhưng tôi không muốn nó ở đây. Tôi muốn bộ điều khiển đối tượng Demo có sẵn cho tất cả mọi người, vì nó chỉ sử dụng dữ liệu giả.

Tôi đoán tôi sẽ triển khai thuộc tính Ủy quyền của riêng mình mà không được kế thừa, vì tôi không thể tìm thấy bất kỳ cách nào để xóa thuộc tính khỏi lớp được kế thừa.

Trả lời

5

Vì nó được đánh dấu là được kế thừa, nên bạn không thể làm gì nhiều trong trường hợp này (vì bạn không kiểm soát mã đang kiểm tra thuộc tính thông qua phản ánh). Việc triển khai thuộc tính của riêng bạn có vẻ là tùy chọn thực tế nhất.

Với MVC bạn cũng có thể thường xuyên đạt được cùng chức năng với ghi đè (phương pháp On*), có thể đáng xem xét.

0

Nếu loại cơ sở yêu cầu ủy quyền thì tất cả các loại con cũng phải yêu cầu ủy quyền. Tôi nghĩ rằng bạn nên thừa kế từ một loại khác nhau nhưng một workaround sẽ được tuyên bố của riêng bạn AthorizeAttribute mà làm việc cho trường hợp cụ thể này.

Các vấn đề liên quan