C#属性以防止方法执行

时间:2015-08-31 22:32:07

标签: c# asp.net-mvc-4 custom-attributes

我正在尝试添加一项功能,如果将应用程序设置设置为不保存,则无法保存数据。我有许多DataManagers在我的应用程序中充当数据访问层。我的计划是创建2个自定义属性[DataRetention("PolicyNameHere")][InspectDataRetention],这些属性应该应用于我的数据管理器上的方法,如果存在,应用程序应检查我的[DataRetention]上的RetentionSetting属性是否为设置为DoNotSave,如果是,请忽略。例如:

public class User
{

     public string Name {get; set;}

     [DataRetention("PII")]
     public long SSN {get; set;}
}

public class UserManager
{

     public User GetUser(int userId);

     [InspectDataRetention]
     public void UpdateUser(User user);

     public void Delete(User user);

}

在上面的示例中,当在UserManager上调用UpdateUser时,应用程序将首先检查对象并搜索任何[DataRetention]属性。然后它将获取属性的RetentionSetting属性(因为该属性的构造函数将设置保留设置),如果它设置为DoNotSave,则它会将该字段重置为其默认值(在本例中为0)。但是,如果User类被修改如下:

[DataRetention("PII")]
public class User 
{         
     public string Name {get; set;}
     public long SSN {get; set;}     
}

然后,当配置DoNotSave时,UpdateUser应该只返回null(不执行更新方法。

这是否可以使用自定义属性?如果没有,在具有特定接口的拦截器之外(即RetainableDataManager:IDataManager并让我的所有数据管理器实现相同的IDataManager接口)是否有任何方法可以实现此行为。

  • MVC4应用程序
  • 数据管理员是POCO
  • 数据层前面的服务层(也由POCO构成)

1 个答案:

答案 0 :(得分:2)

您可能想看看AOP(面向方面​​编程)。您的[InspectDataRetention]属性听起来很像可以注入的方面。 PostSharp是AOP的.Net实现。