[英]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.