最初的回答:
如何将继承自一个接口的对象映射到继承自另一个接口的对象。
我有这样的代码结构:
最好的实现方式对我来说应该是这样的:
最初的回答
这个变体效果不太好。我尝试解释我的想法,怎样做会更好?最初的回答。
我有这样的代码结构:
public interface IDataTranslatable
{
List<DataTranslation> SpanishDataTranslations {get;set;}
}
public interface IDataTranslatableDto
{
List<DataTranslationDto> DataTranslations { get; set; }
}
对象 DataTranslation
和 DataTranslationDto
拥有相同的属性。
我有许多从接口 IDataTranslatable
和 IDataTranslatableDto
继承而来的对象。例如:
public class Category : IDataTranslatable
{
public string Name { get; set; }
public ICollection<DataTranslation> SpanishDataTranslations { get; set; } = new List<DataTranslation>();
}
public class CategoryDto : IDataTranslatableDto
{
public string Name { get; set; }
public List<DataTranslationDto> DataTranslations { get; set; } = new List<DataTranslationDto>();
}
最好的实现方式对我来说应该是这样的:
config.CreateMap<IDataTranslatable, IDataTranslatableDto>()
.ForMember(dest => dest.DataTranslations, opts => opts.MapFrom(src => src.SpanishDataTranslations));
我的意思是任何继承自IDataTranslatable
的对象都必须映射到继承自IDataTranslatableDto
的对象来对应字段。
但这样做不起作用,所以我尝试像这样进行映射
注:Original Answer翻译成"最初的回答"
config.CreateMap<IDataTranslatable, CategoryDto>()
.ForMember(dest => dest.DataTranslations, opts => opts.MapFrom(src => src.SpanishDataTranslations));
最初的回答
当前使用
public class AutoMapperConfiguration : IAutoMapperConfiguration
{
public void Configure(IMapperConfigurationExpression config)
{
IDataTranslatableMappings(config);
}
private void IDataTranslatableMappings(IMapperConfigurationExpression config)
{
var mapCategory = config.CreateMap<Category, CategoryDto>().ForMember(dest => dest.DataTranslations, opts => opts.MapFrom(src => src.SpanishDataTranslations));
}
}
这个变体效果不太好。我尝试解释我的想法,怎样做会更好?最初的回答。