我正在尝试添加一项功能,如果将应用程序设置设置为不保存,则无法保存数据。我有许多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接口)是否有任何方法可以实现此行为。
答案 0 :(得分:2)
您可能想看看AOP(面向方面编程)。您的[InspectDataRetention]
属性听起来很像可以注入的方面。 PostSharp是AOP的.Net实现。