删除.net中的继承属性

时间:2009-07-10 13:03:39

标签: c# .net attributes

我有一个像这样的ASP.NET MVC控制器

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

Authorize属性在框架中定义为“Inherited = true”。所以当我制作下一个控制器时:

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

它获取了authorize属性,但我不想在这里。我希望Demo Object控制器可供所有人使用,因为它只使用假数据。

我想我会实现我自己的不会继承的Authorize属性,因为我找不到任何方法从继承的类中删除该属性。

2 个答案:

答案 0 :(得分:5)

由于它被标记为继承,因此在这种情况下你无能为力(因为你不能控制通过反射检查属性的代码)。实现自己的属性似乎是最实用的选择。

使用MVC,您通常也可以使用覆盖(On*方法)实现相同的功能,这可能值得研究。

答案 1 :(得分:0)

如果基本类型需要授权,那么所有子类型也应该需要授权。我认为你应该继承不同的类型,但解决方法是声明你自己的AthorizeAttribute适用于这个特定的实例。