2015-08-31 74 views
0

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

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); 

} 

在上面的例子中,当UpdateUser两个被称为上的UserManager,应用程序将首先检查对象并搜索任意[DataRetention]的属性。然后它会抓取属性的RetentionSetting属性(因为属性的构造函数会设置保留设置),如果它设置为DoNotSave,那么它会将该字段重置为其默认值(在此情况下为0)。但是,如果用户类进行了修改,如下图所示:

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

然后,配置DoNotSave时,UpdateUser两个应该简单地返回null(不执行更新方法

这可能与一个自定义属性如果?不,有一个特定的接口的拦截器的外部(即RetainableDataManager:IDataManager,并有我所有的数据管理实现了相同的IDataManager接口)有没有办法做到这一点的行为

  • MVC4应用
  • 数据管理员是在数据层(由波苏斯也是)

回答

2

你可能想看看AOP(面向方面​​编程)的前波苏斯

  • 服务层。你的[InspectDataRetention]属性听起来很像一个可以注入的方面。 PostSharp是AOP的.Net实现。

  • +0

    我希望我可以将其添加到我的项目中,但我对现在可以使用的技术稍有限制。谢谢你的想法。 – Mike