C# AutoMapper IMemberValueResolver源对象到成员属性映射问题
我有一个嵌套的实体框架对象,其中包含下拉列表中使用的显示标题的翻译。我试图从整个源对象解析显示标题,但我无法找出正确的语法 以下是解析程序:C# AutoMapper IMemberValueResolver源对象到成员属性映射问题,c#,automapper,C#,Automapper,我有一个嵌套的实体框架对象,其中包含下拉列表中使用的显示标题的翻译。我试图从整个源对象解析显示标题,但我无法找出正确的语法 以下是解析程序: public class IssueTypeResolver : IMemberValueResolver<lstIssueType, string, string, string> { public string Resolve(lstIssueType source, string destination, string sourc
public class IssueTypeResolver : IMemberValueResolver<lstIssueType, string, string, string>
{
public string Resolve(lstIssueType source, string destination, string sourceMember, string destMember, ResolutionContext context)
{
// culture override from resources if available
var cultureCode = context.Options.Items["CultureCode"].ToString();
if (source.refResourceType != null && source.refResourceType.Resources != null)
{
var cultureOverride = source.refResourceType.Resources.FirstOrDefault(r => r.CultureCode == cultureCode);
if (cultureOverride != null)
{
return cultureOverride.ResourceText;
}
}
return source.DisplayTitle;
}
}
公共类IssueTypeResolver:IMemberValueResolver
{
公共字符串解析(lstsissueType源、字符串目标、字符串源成员、字符串目标成员、ResolutionContext上下文)
{
//来自资源的区域性覆盖(如果可用)
var cultureCode=context.Options.Items[“cultureCode”].ToString();
if(source.refResourceType!=null&&source.refResourceType.Resources!=null)
{
var cultureOverride=source.refResourceType.Resources.FirstOrDefault(r=>r.CultureCode==CultureCode);
如果(cultureOverride!=null)
{
返回cultureOverride.ResourceText;
}
}
返回source.DisplayTitle;
}
}
这是配置图:
cfg.CreateMap<DataAccess.DbModel.lstIssueType, Contract.IssueType>()
.ForMember(
d => d.Description,
opts => opts.ResolveUsing<IssueType2Resolver, string>(????));
cfg.CreateMap<lstIssueType, IssueType>()
.ForMember(d => d.Description, opts => opts
.ResolveUsing<IssueTypeResolver>(src => src.refResourceType));
cfg.CreateMap()
福门博先生(
d=>d.描述,
opts=>opts.ResolveUsing(??);
我需要将整个lstIssueType作为源代码传入,但我不知道怎么做。如果有人感兴趣,下面的解决方案是使用
IValueResolver
而不是IMemberValueResolver
:
public class IssueTypeResolver : IValueResolver<lstIssueType, IssueType, string>
{
public string Resolve(lstIssueType source, IssueType destination, string member, ResolutionContext context)
{
var cultureCode = context.Options.Items["CultureCode"].ToString();
if (source.refResourceType != null && source.refResourceType.Resources != null)
{
var cultureOverride = source.refResourceType.Resources.FirstOrDefault(r => r.CultureCode == cultureCode);
if (cultureOverride != null)
{
return cultureOverride.ResourceText;
}
}
return source.DisplayTitle;
}
}
公共类IssueTypeResolver:IValueResolver
{
公共字符串解析(lstIssueType源、IssueType目标、字符串成员、ResolutionContext上下文)
{
var cultureCode=context.Options.Items[“cultureCode”].ToString();
if(source.refResourceType!=null&&source.refResourceType.Resources!=null)
{
var cultureOverride=source.refResourceType.Resources.FirstOrDefault(r=>r.CultureCode==CultureCode);
如果(cultureOverride!=null)
{
返回cultureOverride.ResourceText;
}
}
返回source.DisplayTitle;
}
}
和匹配的配置映射:
cfg.CreateMap<DataAccess.DbModel.lstIssueType, Contract.IssueType>()
.ForMember(
d => d.Description,
opts => opts.ResolveUsing<IssueType2Resolver, string>(????));
cfg.CreateMap<lstIssueType, IssueType>()
.ForMember(d => d.Description, opts => opts
.ResolveUsing<IssueTypeResolver>(src => src.refResourceType));
cfg.CreateMap()
.ForMember(d=>d.Description,opts=>opts
.ResolveUsing(src=>src.refResourceType));
。