2015-08-31 75 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