簡體   English   中英

根據lambda表達式添加屬性

[英]Adding properties based on lambda expressions

我正在使用C#創建一個視圖模型,以后將其序列化為Json以便與KnockoutJs一起使用。

現在,如果某個用戶有權查看和/或編輯屬性,則需要在屬性級別上添加信息。

由於Javascript幾乎沒有反射的可能性,因此我想在序列化為Json之前使用C#進行此操作。

我的視圖模型可能如下所示:

class ViewModel {
    public string Name { get; set; }        
}

我想使用一個用戶訪問服務,該服務將使用具有某些角色的用戶和視圖模型,並通過這些角色並應用訪問權限。 像這樣:

class AccessService {
    public void Apply(IUser user, ViewModel viewModel) {
        if(user.Roles.Contains(Roles.Admin)) {
            viewModel.AllowRead(vm => vm.Name);
        }
    }
}

viewModel.AllowRead(..)方法將是一個擴展方法,它將采用一個object (或者必要時接口或類型),而這正是發生魔術的地方。

我希望此操作的結果是viewModel將獲得一個名為CanRead的新屬性,而該屬性又將具有一個名為Name的布爾屬性。

生成的viewModel將如下所示:

class ViewModel {
    public string Name { get; set; }
    public object CanRead { // Could non anonymous as well.
        return new {
            Name = true;
        };
    }
}

可以通過動力學完成此操作,還是必須使用Reflection.Emit? 我不是要“給我看編碼”。 我只想知道我的想法是明智的還是可行的。

有任何想法嗎?

我認為這是有可能的,您可以使用Lambdanator幫助實現這一目標。

用法示例:

Lambda.Reflect<SomeClass>(x => x.AMethod());    
Lambda.Reflect<SomeClass>(x => x.AProperty);    
Lambda.Reflect(() => local);

暫無
暫無

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

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