代码之家  ›  专栏  ›  技术社区  ›  AndreasN

删除.NET中继承的属性

  •  5
  • AndreasN  · 技术社区  · 15 年前

    我有一个这样的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属性,但我不想在这里看到它。我希望演示对象控制器对每个人都可用,因为它只使用假数据。

    我想我将实现自己的authorize属性,但这些属性不会被继承,因为我找不到从继承的类中移除该属性的任何方法。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Marc Gravell    15 年前

    因为它被标记为继承的,所以在这种情况下您不能做很多事情(因为您不控制通过反射检查属性的代码)。实现自己的属性似乎是最实际的选择。

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

        2
  •  0
  •   Andrew Hare    15 年前

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