Id
我的ViewModel
类中的属性可以设置,但不能在设置器加密值时获取。要获得该值,我必须使用GetEncryptedId()
or 或GetDecryptedId()
.
视图模型
public ViewModel
{
public int _id;
public int Id { set { _id = Encrypt(value); }
public Child ChildProperty {get; set; }
}
public Child
{
public int Id {get; set;}
public string Name {get; set; }
}
这里的问题是,出于某种原因,Auto Mapper 需要一个 get 访问器,以便它可以设置一个值。
public ViewModelProfile()
{
CreateMap<Model, ViewModel>().ForMember(vm => vm.Id, opt => opt.MapFrom(m => m.ChildProperty.Id))
}
这会抛出并错误说明:
CS0154 The property or indexer 'Id' cannot be used in this context because it lacks the get accessor.
作为一种解决方法,我添加了一个Get { return -1; }
,但这远非理想。
这不是 AutoMapper 本身的限制,而是它的 API 结构方式的限制。vm => vm.Id
无法构建表达式树,因为这是对属性 getter 的引用,这是不可能的,因为没有 getter。传递表达式树作为引用成员的强类型方式是一种标准技术;到目前为止,AutoMapper 并不是唯一会出现问题的东西。在这种情况下,AutoMapper 最终不会调用 getter 的事实并不重要。
幸运的是,ForMember
有一个接受成员名称作为字符串的覆盖,并使用它避免了表达式树的问题:
CreateMap<Model, ViewModel>()
.ForMember(nameof(ViewModel.Id), opt => opt.MapFrom(m => m.ChildProperty.Id))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句