簡體   English   中英

將“代碼/屬性/東西”與C#中的字段關聯,不帶反射。 我對Javascript過於灌輸

[英]Associate “Code/Properties/Stuff” with Fields in C# without reflection. I am too indoctrinated by Javascript

我正在構建一個庫,以便在我正在處理的項目中自動為對象創建表單。

代碼庫在C#中,基本上我們有大量不同的對象來存儲有關不同事物的信息。 如果我將這些對象作為JSON發送到客戶端,則很容易以編程方式檢查它們以生成所有屬性的表單。

問題是我希望能夠創建一種在客戶端執行權限和進行驗證的簡單方法。 它需要在字段級別的字段上完成。

在javascript中我會通過創建一個並行的對象結構來做到這一點,它有某種形式

{ permissions : "someLevel", validator : someFunction }
節點處的對象。 空節點意味着免費權限和通用驗證。 這將讓我簡單地迭代新對象和權限對象,運行檢查,並處理結果。

因為我對javascript的錘子過於強大,所以這是我能看到解決這個問題的唯一方法。 因此,我的第一個實現使用反射讓我將對象視為字典,可以以編程方式迭代,然后我只有可以與之比較的PermissionRule對象字典的字典。

非常javascripty。 很尷尬。

有沒有更好的方法可以做到這一點? 本質上是一種將數據集與每個屬性相關聯,然后迭代這些屬性的方法。

或者我做錯了嗎?

這聽起來像是在描述自定義屬性 - 即

[Permissions("someLevel"), Validator("someFunction")]
public string Foo {get;set;}

這需要一些反思才能讀取屬性,但這是一種很好的方法來裝飾類型/成員/等等。您還可以查看預卷[PrincipalPermission]以進行安全檢查。 你是這個意思嗎?

請注意,上述內容需要:

public class PermissionsAttribute : Attribute {
    private readonly string permissions;
    public string Permissions { get {return permissions;}}
    public PermissionsAttribute(string permissions) {
        this.permissions = permissions;
    }
}

(和另一個相似)

您可以使用Attribute.GetCustomAttributes讀出它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM