Как сопоставить объекты, унаследованные от одного интерфейса, с объектами, унаследованными от другого интерфейса.
У меня такая структура кода
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
, с соответствующими полями.
Но это не сработает, поэтому я попытался отобразить вот так
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));
}
}
Этот вариант тоже не работает.
Я пытался объяснить свою идею, как лучше это сделать?